XML DOM - Список узлов

Список узлов возвращается методом getElementsByTagName() и свойством childNodes.

Список узлов DOM

При использовании свойств или методов, таких как childNodes или getElementsByTagName(), возвращается объект списка узлов.

Объект списка узлов представляет собой список узлов в том же порядке, в каком они находятся в XML документе.

Доступ к узлам в списке узлов осуществляется по номерам индексов, начиная с 0.

На следующем изображении показан список узлов элементов <title> в файле books.xml:

Список узлов XML DOM

Предположим, файл "books.xml" был загружен в переменную xmlDoc.

Следующий фрагмент кода возвращает список узлов элементов title:


x = xmlDoc.getElementsByTagName("title");

После выполнения приведенного выше выражения, в переменной "x" будет содержаться объектом списка узлов.

Следующий фрагмент кода возвращает текст из первого элемента <title> в списке узлов (x):


var txt = x[0].childNodes[0].nodeValue;

После выполнения приведенного выше выражения, переменная txt = "Everyday Italian".

Длина списка узлов

Объект списка узлов постоянно поддерживает себя в актуальном состоянии. Если элемент удаляется или добавляется, список обновляется автоматически.

Свойство length объекта списка узлов содержит количество узлов в списке.

Следующий фрагмент кода возвращает количество элементов <title> в "books.xml":


x = xmlDoc.getElementsByTagName('title').length;

После выполнения приведенного выше выражения, значение переменной x будет равно 4.

Длину списка узлов можно использовать для циклического перебора всех элементов в списке.

В следующем примере свойство length используется для просмотра списка элементов <title>:


x = xmlDoc.getElementsByTagName('title');
xLen = x.length;

for (i = 0; i < xLen; i++) {
    txt += x[i].childNodes[0].nodeValue) + " ";
}

Результат:


Everyday Italian
Harry Potter
XQuery Kick Start
Learning XML

Объяснение примера:

  1. Предположим, что файл books.xml был загружен в переменную xmlDoc.
  2. Получаем в переменную x список узлов всех элементов title
  3. Собираем значения текстовых узлов из элементов title

Список атрибутов DOM (карта именованных узлов)

Свойство attributes узла-элемента возвращает список узлов-атрибутов.

Этот список называется картой именованных узлов, и он похож на список узлов, за исключением некоторых различий в методах и свойствах.

Объект списка атрибутов постоянно поддерживает себя в актуальном состоянии. Если атрибут удаляется или добавляется, список обновляется автоматически.

Следующий фрагмент кода возвращает список узлов-атрибутов первого элемента <book> в документе "books.xml":


x = xmlDoc.getElementsByTagName('book')[0].attributes;

После выполнения приведенного выше выражения, свойство x.length будет равно количеству атрибутов, а метод x.getNamedItem() можно будет использовать для получения узла-атрибута.

В следующем примере мы получаем значение атрибута "category" и количество атрибутов у элемента book:


x = xmlDoc.getElementsByTagName("book")[0].attributes;

txt = x.getNamedItem("category").nodeValue + " " + x.length;

Результат:


cooking 1

Объяснение примера:

  1. Предположим, что файл books.xml был загружен в переменную xmlDoc.
  2. Получаем в переменную x список узлов-атрибутов первого элемента book
  3. Получаем значение атрибута "category" и длину списка атрибутов