XML DOM — доступ к узлам
С DOM вы можете получить доступ к каждому узлу в XML-документе.
Попробуйте сами — примеры
В приведенных ниже примерах используется XML-файл books.xml .
. Используйте метод getElementsByTagName(), чтобы получить третий элемент <title> в «books.xml».
Используйте свойство length для циклического просмотра всех элементов <title> в "books.xml"
Используйте свойство nodeType, чтобы получить тип узла корневого элемента в «books.xml».
Используйте свойство nodeType для обработки только узлов элементов в «books.xml».
Используйте свойство nodeType и свойство nextSibling для обработки узлов элементов в «books.xml».
Доступ к узлам
Вы можете получить доступ к узлу тремя способами:
1. С помощью метода getElementsByTagName()
2. Перебирая (обходя) дерево узлов.
3. Перемещаясь по дереву узлов, используя отношения узлов.
Метод getElementsByTagName()
getElementsByTagName() возвращает все элементы с указанным именем тега.
Синтаксис
node.getElementsByTagName("tagname");
Пример
В следующем примере возвращаются все элементы <title> под элементом x:
x.getElementsByTagName("title");
Обратите внимание, что приведенный выше пример возвращает только элементы <title> под узлом x. Чтобы вернуть все элементы <title> в документе XML, используйте:
xmlDoc.getElementsByTagName("title");
где xmlDoc — это сам документ (узел документа).
Список узлов DOM
Метод getElementsByTagName() возвращает список узлов. Список узлов представляет собой массив узлов.
x = xmlDoc.getElementsByTagName("title");
Доступ к элементам <title> в x можно получить по номеру индекса. Чтобы получить доступ к третьему <title>, вы можете написать::
y = x[2];
Примечание. Индекс начинается с 0.
Вы узнаете больше о списках узлов в следующей главе этого руководства.
Длина списка узлов DOM
Свойство length определяет длину списка узлов (количество узлов).
Вы можете просмотреть список узлов, используя свойство length:
Пример
var
x = xmlDoc.getElementsByTagName("title");
for (i = 0; i <x.length; i++) {
//
do something for each node
}
Типы узлов
Свойство documentElement документа XML является корневым узлом.
Свойство nodeName узла — это имя узла.
Свойство nodeType узла — это тип узла.
Вы узнаете больше о свойствах узла в следующей главе этого руководства.
Пересечение узлов
Следующий код перебирает дочерние узлы, которые также являются узлами-элементами корневого узла:
Пример
txt = "";
x = xmlDoc.documentElement.childNodes;
for (i = 0; i <x.length; i++)
{
// Process only element nodes (type 1)
if (x[i].nodeType == 1) {
txt += x[i].nodeName + "<br>";
}
}
Объяснение примера:
- Предположим, вы загрузили « books.xml » в xmlDoc.
- Получить дочерние узлы корневого элемента (xmlDoc)
- Для каждого дочернего узла проверьте тип узла. Если тип узла "1", это узел элемента.
- Выведите имя узла, если он является узлом элемента
Навигация по связям узлов
Следующий код перемещается по дереву узлов, используя отношения узлов:
Пример
x = xmlDoc.getElementsByTagName("book")[0];
xlen = x.childNodes.length;
y = x.firstChild;
txt = "";
for (i = 0; i <xlen; i++)
{
// Process only element nodes (type 1)
if (y.nodeType == 1) {
txt += y.nodeName + "<br>";
}
y = y.nextSibling;
}
Объяснение примера:
- Предположим, вы загрузили « books.xml » в xmlDoc.
- Получить дочерние узлы первого элемента книги
- Установите переменную "y" в качестве первого дочернего узла первого элемента книги.
- Для каждого дочернего узла (начиная с первого дочернего узла "y"):
- Проверьте тип узла. Если тип узла "1", это узел элемента.
- Выведите имя узла, если он является узлом элемента
- Установите переменную "y" в качестве следующего родственного узла и снова выполните цикл.