Согласно 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-файл books.xml.
Родительские, дочерние и одноуровневые узлы
Узлы в дереве узлов имеют иерархические отношения друг с другом.
Для описания этих отношений используются термины "родительский", "предок", "потомок", "дочерний", "одноуровневый". У родительских узлов есть потомки. Потомки одного уровня называют одноуровневыми.
- В дереве узлов самый верхний узел называется корневым или корнем.
- Каждый узел, кроме корневого, имеет ровно один родительский узел.
- Узел может иметь любое количество потомков.
- Лист - это узел без потомков.
- Одноуровневые узлы - это узлы с одним и тем же родителем.
На следующем изображении показана часть дерева узлов и отношения между узлами:
Поскольку данные 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>.