Основы XML
9123a142

Доступ и отображение значений атрибутов в 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.

Таблица 9.7. Свойство и некоторые полезные методы, предоставляемы групповым объектом NamedNodeMap. Свойство attributes узла предоставляет объект NamedNodeMapСвойство NamedNodeMapОписаниеПримерМетод 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 ();
Вы можете воспользоваться свойством length объекта NamedNodeMap и установленным по умолчанию методом item, чтобы перемещаться внутри набора и извлекать отдельные узлы Attribute. Например, следующий фрагмент сценария отображает имя и значение каждого атрибута для первого элемента BOOK рассматриваемого документа:

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);


Содержание раздела