Узлы 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>.
Дочерние узлы содержат по одному текстовому узлу каждый: «Повседневный итальянский», «Джада Де Лаурентис», «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> является первым потомком элемента <book>, а элемент <price> — последним потомком элемента <book>.
Более того, элемент <book> является родительским узлом для элементов <title>, <author>, <year> и <price>.