Интерфейс Node
Исходный набор методов для всего пакета org.w3c.dom обеспечивается интерфейсом Node. В этом пакете имеется 13 интерфейсов, производных от интерфейса Node, которые представляют различные части документа. Хотя все они являются расширением Node, определенные методы этого интерфейса в некоторых производных интерфейсах не имеют смысла. В табл. 3.8 перечислены методы интерфейса Node. Обратите внимание на то, что интерпретация возвращаемых значений nodeName и nodeValue зависит от типа узла [Node — узел. — Примеч. перев. ].
Таблица 3.8. Методы интерфейса Node
Метод |
Возвращаемое значение |
Описание | |||
getNodeName |
NodeName |
Возвращаемое значение — строка, представляющая имя Node; интерпретация зависит от типа узла | |||
getNodeVal ue |
NodeVal ue |
Возвращаемое значение — строка, представляющая значение узла; интерпретация зависит от типа узла | |||
setNodeValue |
Пустое множество | ||||
getNodeType |
Целочисленное значение типа short |
Возвращаемое число идентифицирует тип узла согласно определению в интерфейсе Node | |||
getParentNode |
Ссылка на узел |
Возвращается ссылка на узел, являющийся родительским по отношению к данному в иерархии DOM. Не для всех типов узлов существуют родительские узлы | |||
getChildNodes |
Ссылка на семейство узлов NodeList |
Объекты NodeList обеспечивают доступ к упорядоченному списку ссылок на узлы | |||
getFirstChild |
Ссылка на узел |
Первый дочерний узел для данного узла или null, если дочерние узлы отсутствуют | |||
getLastChild |
Ссылка на узел |
Последний дочерний узел для данного или null, если дочерние узлы отсутствуют | |||
getPrevlous Sibling |
Ссылка на узел |
Узел, непосредственно предшествующий данному, или null, если таковой отсутствует | |||
getNextSibling |
Ссылка на узел |
Узел, непосредственно следующий за данным, или null, если таковой отсутствует | |||
getAttributes |
Ссылка на семейство NamedNodeMap |
Методы NamedNodeMap обеспечивают доступ к атрибутам по имени. Возвращает null, если атрибуты отсутствуют | |||
getOwnerDocument |
Ссылка на документ |
Объект Document, которому принадлежит данный узел, или null, если этот узел сам является объектом Document |
Тип узла, с которым мы будем в основном иметь дело, называется Element; эти объекты используют интерфейс org.w3c.dom.Element. Интерфейс Element добавляет несколько методов для работы с атрибутами и именованными узлами, содержащимися в узле Element.
ПРИМЕЧАНИЕ
Для упрощения терминологии мы будем называть объекты, реализующие интерфейсы Node, Element и др., объектами Node, Element (узел, элемент) и др. соответственно. Фактический тип объектов, реализующих интерфейсы, не играет роли, так как мы будем использовать только методы интерфейсов.
Поскольку за недостатком места мы не можем предоставить формальное изложение API org.w3c.dom в том виде, в котором оно приводится на сайте консорциума W3C, исследуем по крайней мере, каким образом фрагмент каталога, соответствующий какому-то товару, представляется объектами Java. В листинге 3.5 показан код XML для одного товара; объект Element для этого кода будет содержать иерархию объектов Node, представляющих XML.
Листинг 3.5. Код XML для одного товара (catalog.xml)
<product id="bk0022" keywords="gardening, plants">
<name>Guide to Plants</name>
<description>
<paragraph>
<italics>Everything</italics>
you've ever wanted to know about plants.
</paragraph>
</description>
<price>$12.99</price>
<quanti ty_i n_stock>4</quanti ty_in_stock>
<image format="gif" width="234" height="468"
src=»images/covers/plants.gif»>
<caption>
<paragraph>This is the cover from the first edition.</paragraph>
</caption>
</image>
<onsale_date>
<month>4</month>
<day_of_month>4</day_of_month>
<year>1999</year>
</onsale_date>
</product>
Например, если вы выполните метод getFirstChild элемента product, то получите ссылку на узел, представляющий элемент name. Элемент name содержит дочерний узел типа Text, а значением этого узла является строка Guide to Plants (справочник по растениям).
Доступ к XML-атрибутам элемента product осуществляется с помощью метода getAttribute, который по имени атрибута возвращает строку — значение атрибута, как в следующем примере:
String id = product.getAttribute("id")
String keywords = product.getAttribute("keywords");
Доступ к узлам первого по отношению к элементу product уровня иерархии осуществляется с помощью метода getChil dNodes. Этот метод возвращает объект, реализующий интерфейс NodeLi st. Объект NodeLi st отличается от других тем, что он содержит динамическое представление документа XML. Это значит, что если в иерархию узлов элемента product будет встроен какой-либо новый узел, это изменение автоматически отразится в объекте NodeLi st (списке узлов XML).