Доступ к Узлам

Рубрика: DOM - Объектная Модель Документа

Приветствую, уважаемые читатели блога okITgo.ru! Как я уже неоднократно говорил, посредством модели DOM Вы можете получить доступ к любому узлу XML документа. Теперь перейдем от теории к практике: рассмотрим конкретные примеры использования DOM.


Попробуйте Сами – Примеры

Примеры ниже используют 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() возвращает все элементы с указанным названием тега.

Синтаксис

узел.getElementsByTagName("название_тега");

Пример

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

x.getElementsByTagName("title");

Обращаю ваше внимание на то, что пример выше возвращает только элементы <title> под узлом x. Чтобы получить все элементы <title> в XML документе, используйте:

xmlDoc.getElementsByTagName("title");

где xmlDoc – это сам документ (узел документа).


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

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

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

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title");

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

y=x[2];

Замечание: Индекс начинается с нуля 0.

В будущих статьях рубрики DOM я планирую рассказать о списках узлов в деталях.


Длина Списка Узлов DOM

Свойство 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("");
  }

Попробуйте сами »

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

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

Типы Узлов

Свойство documentElement XML документа содержит корневой узел.

Свойство nodeName узла содержит название узла.

Свойство nodeType узла содержит тип узла.

В следующей статье рубрики XML DOM я расскажу подробнее о свойствах узлов.

Попробуйте сами!


Обход Узлов

Следующий код обходит дочерние узлы, имеющие тип узла – элемента, корня документа в цикле:

Пример

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("");
  }
}

Попробуйте сами »

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

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

Навигация Посредством Отношений Между Узлами

Следующий код перемещается по дереву узлов, используя взаимоотношения между узлами:

Пример

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 + "");
  }
y=y.nextSibling;
}

Попробуйте сами »
  1. Загружаем "books.xml" в xmlDoc с помощью loadXMLDoc()
  2. Получаем дочерние узлы первого элемента книги
  3. Устанавливаем переменную "y", присваивая ей значение первого дочернего узла первого элемента книги
  4. Для каждого дочернего узла (начиная с первого дочернего узла "y"):
  5. Проверяем тип узла. Если тип узла равен "1", этоit узел элемента
  6. Выводим имя узла, если это узел элемента
  7. Устанавливаем переменную "y", присваивая ей значение следующего узла-брата и проходим по описанному циклу заново

Напомню, что в следующей статье данной рубрики мы подробно рассмотрим свойства узлов, кому интересно – можете подписаться на обновления по электронной почте (форма справа вверху в разделе RSS). Спасибо за внимание! До новых встреч на страницах сайта okITgo.ru.