Список узлов возвращается методом getElementsByTagName() и свойством childNodes.
Список узлов DOM
При использовании свойств или методов, таких как childNodes или getElementsByTagName(), возвращается объект списка узлов.
Объект списка узлов представляет собой список узлов в том же порядке, в каком они находятся в XML документе.
Доступ к узлам в списке узлов осуществляется по номерам индексов, начиная с 0.
На следующем изображении показан список узлов элементов <title> в файле books.xml:
Предположим, файл "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
Объяснение примера:
- Предположим, что файл books.xml был загружен в переменную xmlDoc.
- Получаем в переменную x список узлов всех элементов title
- Собираем значения текстовых узлов из элементов 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
Объяснение примера:
- Предположим, что файл books.xml был загружен в переменную xmlDoc.
- Получаем в переменную x список узлов-атрибутов первого элемента book
- Получаем значение атрибута "category" и длину списка атрибутов