При помощи DOM вы можете получить доступ к каждому узлу в XML-документе.
Получить доступ к узлу можно тремя способами:
- Используя метод getElementsByTagName()
- Путем перебора (обхода) дерева узлов
- Путем обхода дерева узлов, используя отношения между узлами.
Метод getElementsByTagName()
Метод getElementsByTagName() возвращает все элементы с указанным именем тега.
Синтаксис:
узел.getElementsByTagName("имя_тега");
В следующем примере возвращаются все элементы <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++) {
// что-то делаем с каждым узлом
}
Типы узлов
Свойство documentElement XML-документа содержит корневой узел.
Свойство nodeName узла содержит имя узла.
Свойство nodeType узла содержит тип узла.
Подробнее о свойствах узла будет рассказано в следующей главе этого руководства.
Обход узлов
В следующем примере мы в цикле обходим дочерние узлы корневого узла, которые также являются узлами-элементами:
txt = "";
x = xmlDoc.documentElement.childNodes;
for (i = 0; i < x.length; i++) {
// Обрабатываем только узлы элементов (тип 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 < x len; i++) {
// Обрабатываем только узлы элементов (тип 1)
if (y.nodeType == 1) {
txt += y.nodeName + "<br>";
}
y = y.nextSibling;
}
Объяснение примера:
- Предположим, вы загрузили файл books.xml в xmlDoc
- Получаем дочерние узлы первого элемента book
- Поместим в переменную "y" первый дочерний узел первого элемента book.
- Для каждого дочернего узла (начиная с первого дочернего узла в переменной "y"):
- Проверяем тип узла. Если тип узла "1", это узел элемента.
- Выводим имя узла, если это узел элемента
- Помещаем в переменную "y" следующего одноуровневый узел и снова выполняем цикл.