Доступ к элементам XML DOM

Через DOM, вы можете получить доступ к каждому узлу в документе XML.

Пример

Ниже приведен пример с файлом XML books.xml.

Функция loadXMLDoc()находится во внешнем JavaScript, используется для загрузки файла XML.

Доступ к узлу через индекс в списке узлов
В этом примере используется метод getElementsByTagname() для получения третьего элемента <title> в "books.xml".
Циклическое (пробежное)пробежное)遍ение узлов с помощью атрибута length
В этом примере используется атрибут 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 Node List

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

Ниже приведен код, который использует loadXMLDoc() Установите "books.xml"Загрузите xmlDoc в переменную x, затем храните список узлов <title>:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("title");

Вы можете получить доступ к элементам <title> в x через индекс. Чтобы получить доступ к третьему <title>, вы можете написать:

y=x[2];

TIY

Комментарий:Индекс начинается с 0.

В более поздних главах этого руководства вы узнаете больше о списке узлов.

DOM Node List Length

Атрибут length определяет длину списка узлов (т.е. количество узлов).

Вы можете циклически пройти через список узлов, используя атрибут length:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("title");
for (i=0;i<x.length;i++)
  { 
  document.write(x[i].childNodes[0].nodeValue);
  document.write("<br />");
  }

Пример объяснения:

  1. Используйте loadXMLDoc() Установите "books.xml"Загрузите xmlDoc
  2. Получите все элементы <title>
  3. Вывод значений текстовых узлов каждого элемента <title>

TIY

Node Type

XML документ documentElement свойство - это корневой узел.

свойства узла nodeName свойство - это имя узла.

свойства узла nodeType Свойства - это тип узла.

В следующей главе этого руководства вы узнаете больше о свойствах узлов.

TIY

Пройдемся по узлам

Ниже приведен код, который циклически проходит через подузлы корневого узла, которые также являются элементами:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.documentElement.childNodes;
for (i=0;i<x.length;i++)
{ 
  if (x[i].nodeType==1)
  {//Обработка только узлов элемента (тип 1) 
  document.write(x[i].nodeName);
  document.write("<br />");
  } 
}

Пример объяснения:

  1. Используя loadXMLDoc() Установите "books.xml"Загрузите xmlDoc"
  2. Получите подузлы корневого элемента
  3. Проверьте тип узла каждого подузла. Если тип узла равен "1", то это элементный узел
  4. Если узел элемента, то выводите имя узла

TIY

Навигация по узлам с использованием отношений узлов

Ниже приведен код, который использует отношения узлов для навигации по дереву узлов:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("book")[0].childNodes;
y=xmlDoc.getElementsByTagName("book")[0].firstChild;
for (i=0;i<x.length;i++)
{
if (y.nodeType==1)
  {//Обработка только узлов элемента (тип 1)
  document.write(y.nodeName + "<br />");
  }
y=y.nextSibling;
}
  1. Используя loadXMLDoc() Установите "books.xml"Загрузите xmlDoc"
  2. Получите первый подузел элемента "book"
  3. Установите переменную "y" в первый подузел первого элемента "book"
  4. Проверьте тип каждого подузла, если тип узла равен "1", то это узел элемента
  5. Если узел элемента, то выводите имя узла
  6. Установите переменную "y" в следующий同级 узел и запустите цикл снова

TIY