XML DOM - Узлы

Согласно XML DOM, абсолютно все в XML-документе является узлами:

  • Весь документ представляет собой узел документа
  • Каждый XML-элемент является узлом элемента
  • Текст в XML-элементах - это текстовые узлы
  • Каждый атрибут является узлом атрибута
  • Комментарии - это узлы комментариев

Пример DOM

Взгляните на следующий XML-файл (books.xml):


<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="children">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="web">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category="web" cover="paperback">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

Корневой узел в приведенном выше XML-документе называется <bookstore>.

Все остальные узлы в документе вложены в <bookstore>.

Корневой узел <bookstore> содержит 4 узла <book>.

Первый узел <book> содержит дочерние узлы: <title>, <author>, <year> и <price>.

Дочерние узлы содержат по одному текстовому узлу каждый: "Everyday Italian", "Giada De Laurentiis", "2005", "30.00".

Текст всегда хранится в текстовых узлах

Распространенная ошибка при обработке DOM – это ожидание, что узел элемента будет содержать текст.

В действительности же текст узла элемента хранится в текстовом узле.

Пример: <year>2005</year> - узел элемента <year> содержит текстовый узел со значением "2005". При этом "2005" не является значением элемента <year>!

Дерево узлов XML DOM

XML DOM рассматривает XML-документ как древовидную структуру. Эта структура называется деревом узлов.

Благодаря такой структуре можно получить доступ ко всем узлам документа. Их содержимое можно изменять или удалять, а также создавать новые элементы.

Дерево узлов показывает набор узлов и связи между ними. Дерево начинается с корневого узла и разветвляется на текстовые узлы на самом нижнем уровне дерева:

Дерево узлов XML DOM

На этом рисунке показан XML-файл books.xml.

Родительские, дочерние и одноуровневые узлы

Узлы в дереве узлов имеют иерархические отношения друг с другом.

Для описания этих отношений используются термины "родительский", "предок", "потомок", "дочерний", "одноуровневый". У родительских узлов есть потомки. Потомки одного уровня называют одноуровневыми.

  • В дереве узлов самый верхний узел называется корневым или корнем.
  • Каждый узел, кроме корневого, имеет ровно один родительский узел.
  • Узел может иметь любое количество потомков.
  • Лист - это узел без потомков.
  • Одноуровневые узлы - это узлы с одним и тем же родителем.

На следующем изображении показана часть дерева узлов и отношения между узлами:

Отношения между узлами XML DOM

Поскольку данные XML имеют древовидную структуру, по ним можно перемещаться не зная точную структуру дерева и не зная типа содержащихся в нем данных.

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

Первый потомок - Последний потомок

Взгляните на следующий фрагмент XML:


<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
</bookstore>

В данном фрагменте XML элемент <title> - первый потомок, а элемент <price> - последний потомок элемента <book>.

Кроме того, элемент <book> является родительским узлом для элементов <title>, <author>, <year> и <price>.