Доступ и отображение значений атрибутов в XML-документе
Атрибут, который содержится в XML-элементе, представляется дочерним узлом Attribute. Однако вы не сможете обратиться к дочернему узлу Attribute с использованием свойств childNodes, firstChild или lastChild, которые годятся для доступа к дочерним узлам других типов. Вместо этого вам потребуется воспользоваться свойством attributes узла Element.
Примечание. DOM использует узлы Attribute для представления не только атрибутов, но и нескольких типов других компонентов XML, которые состоят из пар имя-значение, а именно:
- имя и значение в инструкции по обработке (например, version="1.0" в XML-объявлении);
- ключевое слово SYSTEM, за которым следует системный литерал в объявлении типа документа, объявлении внешнего примитива, либо в объявлении нотации;
- ключевое слово NDATA, за которым следует имя нотации в объявлении не разбираемого примитива.
Возьмем в качестве примера XML-документ из Листинга 9.6.
<?xml version="1.0"?>
<!-- Имя файла: Inventory Attributes.xml -->
<INVENTORY> <BOOK Binding="mass market paperback" InStock="yes" Review="***"> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR Born="1835">Mark Twain</AUTHOR> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK> <BOOK Binding="hardcover" InStock="no"> <TITLE>Leaves of Grass</TITLE> <AUTHOR Born="1819">Walt Whitman</AUTHOR> <PAGES>462</PAGES> <PRICE>$7.75</PRICE> </BOOK> <BOOK Binding="mass market paperback" InStock="yes" Review="****"> <TITLE>The Legend of Sleepy Hollow</TITLE> <AUTHOR>Washington Irving</AUTHOR> <PAGES>98</PAGES> <PRICE>$2.95</PRICE> </BOOK> </INVENTORY>
Листинг 9.6. Inventory Attributes.xml (html, txt)
Элементы BOOK в этом документе имеют от двух до трех атрибутов. Следующее выражение в сценарии получает узел для первого элемента BOOK:
Document.documentElement.childNodes(0)
(В этих и последующих примерах в данном разделе предполагается, что Document содержит узел Document.)
Свойство attributes данного узла Element предоставляет набор NamedNodeMap узлов Attribute для всех атрибутов, принадлежащих первому элементу BOOK:
NamedNodeMap = Document.documentElement.childNodes(0).attributes
Групповой объект NamedNodeMap несколько отличается от группового объекта NodeList, предоставляемого свойством узла childNodes. В таблице 9.7 приведены свойство и несколько полезных методов, предоставляемых объектами NamedNodeMap.
length | Количество узлов, содержащихся в наборе | AttributeCount = Element.attributes.length; |
getNamedItem (имя-атр) | Возвращает узел, который носит заданное имя | Attribute = Element.attributes.getNamedItem ("Binding"); |
item (индекс, отсчитываемый от нуля) (метод по умолчанию) | Возвращает узел в заданной индексом позиции (0 соответствует первому узлу) | SecondAttribute = Element.attributes.item (1); или SecondAttribute = Element.attributes (1); |
reset () | Устанавливает внутренний указатель на позицию перед первым узлом в наборе, так что последующий вызов nextNode возвращает первый узел | Element.attributes.reset (); |
nextNode () | Возвращает следующий узел в наборе в соответствии со значением внутреннего указателя | Element.attributes.reset (); FirstAttribute = Element.attributes.nextNode (); |
NamedNodeMap = Document.documentElement.childNodes(0).attributes; for (i=0; i<NamedNodeMap.length; ++i) alert ("node name: " + NamedNodeMap(i).nodeName + "\n" + "node value: " + NamedNodeMap(i).nodeValue);