![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Доступ и отображение значений атрибутов в XML-документе
Атрибут, который содержится в XML-элементе, представляется дочерним узлом Attribute. Однако нельзя обратиться к дочернему узлу Attribute с использованием свойств childNodes, firstChild или lastChild, которые годятся для доступа к дочерним узлам других типов. Вместо этого потребуется воспользоваться свойством attributes узла Element. DOM использует узлы Attribute для представления не только атрибутов, но и нескольких типов других компонентов XML, которые состоят из пар имя-значение, а именно: · имя и значение в инструкции по обработке (например, version="1.0" в XML-объявлении); · ключевое слово SYSTEM, за которым следует системный литерал в объявлении типа документа, объявлении внешнего примитива, либо в объявлении нотации; · ключевое слово NDATA, за которым следует имя нотации в объявлении не разбираемого примитива. Возьмем в качестве примера XML-документ из Листинга 1.30.
<?xml version=”1.0”?> <!-- Имя файла: Inventory07.xml --> <INVENTORY> <BOOK Binding=”Жёсткая обложка” InStock=”да” Review=”***”> <TITLE>Война и мир</TITLE> <AUTHOR>Лев Толстой</AUTHOR> <PAGES>510</PAGES> <PRICE>12 000 рублей</PRICE> </BOOK> <BOOK Binding=”Мягкая обложка” ” InStock=”нет”> <TITLE>Преступление и наказание</TITLE> <AUTHOR>Фёдор Достоевский</AUTHOR> <PAGES>590</PAGES> <PRICE>14 000 рублей</PRICE> </BOOK> <BOOK Binding=”Мягкая обложка” InStock=”да” Review=”****”> <TITLE>Королева Марго</TITLE> <AUTHOR>Александр Дюма</AUTHOR> <PAGES>410</PAGES> <PRICE>10 000 рублей</PRICE> </BOOK> </INVENTORY> Листинг 1.30
Элементы BOOK в этом документе имеют от двух до трех атрибутов. Следующее выражение в сценарии получает узел для первого элемента BOOK: Document.documentElement.childNodes(0)
(В этих и последующих примерах в данном разделе предполагается, что Document содержит узел Document.) Свойство attributes данного узла Element предоставляет набор NamedNodeMap узлов Attribute для всех атрибутов, принадлежащих первому элементу BOOK:
NamedNodeMap = Document.documentElement.chikJNodes(0).attributes
Групповой объект NamedNodeMap несколько отличается от группового объекта NodeList, предоставляемого свойством узла childNodes. В таблице 5.26 приведены свойство и несколько полезных методов, предоставляемых объектами NamedNodeMap. Таблица 5.26 Свойство и некоторые полезные методы, предоставляемые групповым объектом NamedNodeMap. Свойство attributes узла предоставляет объект NamedNodeMap
Можно воспользоваться свойством length объекта NamedNodeMap и установленным по умолчанию методом item, чтобы перемещаться внутри набора и извлекать отдельные узлы Attribute. Например, следующий фрагмент сценария отображает имя и значение каждого атрибута для первого элемента BOOK рассматриваемого документа:
NamedNodeMap = Document.documentElement.childNodes(0).attributes; for (I = 0; i < NamedNodeMap.length; ++i) alert ("имя узла:" + NamedNodeMap(i).nodeName + "\n" + "значение узла:" + NamedNodeMap(i).nodeValue);
Каждая пара имя-значение отображается в окне сообщения-предупреждения. На следующем рисунке показано, как оно выглядит. Рисунок 50. Отображение имени и значения узла
Обратите внимание, что свойство nodeName узла Attribute содержит имя атрибута, в то время как свойство nodeValue содержит значение атрибута. В действительности узел Attribute имеет дочерний узел Text, который содержит значение атрибута. Однако этот узел практически не нужен, поскольку можно легко получить значение атрибута из свойства nodeValue узла Attribute. В связи с этим тип дочернего узла Text в этой главе не рассматривается. Определенный узел Attribute можно извлечь из объекта NamedNodeMap, вызвав метод getNamedItem данного объекта. Например, следующий фрагмент кода сценария отображает значение атрибута Binding первого элемента BOOK в рассматриваемом документе: NamedNodeMap = Document.documentElement.childNodes(0).attributes; alert (NamedNodeMap.getNamedItem("Binding").nodeValue);
На следующем рисунке показано, как выглядит предупреждающее сообщение. Рисунок 51. Отображение значения атрибута
![]() |