1 Вопрос: xmlDoc.getElementsByTagName - несколько одинаковых имен тегов, получить только одно от определенного родителя?

вопрос создан в Wed, May 8, 2019 12:00 AM

Я пытаюсь проанализировать другой XML-файл для получения определенной информации, но в этом файле есть кратные имена одного и того же тега, но их количество может варьироваться в зависимости от файла, то есть я не могу просто добавить это тег нумерации, я бы хотел, чтобы он основывался на теге родителя, так что будет проанализирован только определенный родительский тег /тег.


var request = new XMLHttpRequest();
request.onreadystatechange = function() {
   if (this.readyState == 4 && this.status == 200) {
       myFunction(this);
   }
};
request.open("GET", "test.xml", true)
request.send();
function myFunction(xml) {
   var xmlDoc = xml.responseXML;
   var test = xmlDoc.getElementsByTagName("SerialNumber")[0].childNodes[0].nodeValue;
};

Я читал о Xpath, но не могу заставить его работать в моем коде.

В качестве примера можно привести несколько тегов SerialNumber, но я бы хотел, чтобы проверка стала только значением узла SerialNumber, которое находится под родительским «Хранилищем».

    
0
1 ответ                              1                         

Попробуйте что-нибудь подобное для myFunction:

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
    var resultset = xmlDoc.evaluate('//Storage/SerialNumber', xmlDoc);
    var nodes = [];
    var node;

    while (node !== null) {
        node = resultset.iterateNext();
        nodes.push(node);
    }

    // Do what you need to here.
    console.log(nodes);
    // For example, to get the first result's text contents:
    console.log(nodes[0].textContent);
};

Использует запрос XPath для поиска всех элементов SerialNumber, являющихся дочерними элементами узлов Storage, в извлеченном документе XML.

Если у вас есть спецификация, в которой говорится, что в документе будет только одна родительская /дочерняя комбинация Storage > SerialNumber, то стоит проверить длину результирующего массива и выдать ошибку, если она не одна.

    
0
2019-05-09 11: 19: 41Z
  1. Возможно, может быть более одной комбинации SerialNumber Parent /Child, но когда я запускаю этот код, он регистрирует "[Элемент объекта],"
    2019-05-08 16: 49: 45Z
  2. Это то, что я ожидал бы, если бы в документе был только один. Вы должны быть в состоянии получить все, что вы хотите от объектов элементов в массиве. Я что-то упустил?
    2019-05-08 18: 10: 49Z
  3. К сожалению, я все еще новичок в этом, поэтому, если я что-то упускаю из виду, я прошу прощения. Узлы массива имеют только одну вещь, поскольку это всего лишь один документ, но значением является [объектный элемент], а не то, что находится под тегом SerialNumber в файле XML, я вижу, что он находит правильный объект, но не правильное значение?
    2019-05-08 18: 18: 35Z
  4. А, понятно. Я обновил пример с тем, как получить фактическое текстовое содержимое тега. Я прошу прощения за то, что не прочитал ваш вопрос более внимательно.
    2019-05-08 18: 20: 35Z
  5. Это сработало, огромное спасибо!
    2019-05-08 18: 23: 54Z
источник размещен Вот