Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Доступ и отображение значений атрибутов в XML-документе



Атрибут, который содержится в XML-элементе, представляется дочерним узлом Attribute. Однако вы не сможете обратиться к дочернему узлу Attribute с использованием свойств childNodes , firstChild   или lastChild, которые годятся для доступа к дочерним узлам других типов. Вместо этого вам потребуется воспользоваться свойством attributes узла Element .

 

Примечание. DOM использует узлы Attribute для представления не только атрибутов, но и нескольких типов других компонентов XML, которые состоят из пар имя-значение, а именно:

 - имя и значение в инструкции по обработке (например, version="1.0" в XML-объявлении);

 - ключевое слово SYSTEM, за которым следует системный литерал в объявлении типа документа, объявлении внешнего примитива, либо в объявлении нотации;

 - ключевое слово NDATA, за которым следует имя нотации в объявлении не разбираемого примитива.

 

Возьмем в качестве примера XML-документ из файла Inventory_Attributes.xml.

Содержание файла Inventory_Attributes.xml:

 

<?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>

 

Элементы BOOK в этом документе имеют от двух до трех атрибутов. Следующее выражение в сценарии получает узел для первого элемента BOOK:

 

Document.documentElement.childNodes(0)

 

В этих и последующих примерах в данном разделе предполагается, что Document содержит узел Document.

Свойство attributes данного узла Element предоставляет набор NamedNodeMap   узлов  Attribute   для всех атрибутов, принадлежащих первому элементу BOOK:

 

NamedNodeMap = Document.documentElement.childNodes(0).attributes

 

Групповой объект NamedNodeMap несколько отличается от группового объекта NodeList, предоставляемого свойством узла childNodes. В таблице 4.7 приведены свойство и несколько полезных методов, предоставляемых объектами NamedNodeMap.

 

Таблица 4.7. Свойство и некоторые полезные методы,

предоставляемы групповым объектом NamedNodeMap

 

Свойство NamedNodeMap Описание Пример
length Количество узлов, содержащихся в наборе AttributeCount = Element.attributes.length;
Метод NamedNodeMap    
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);

 

Каждая пара имя-значение отображается в окне сообщения-предупреждения. На рисунке 4.5 показано как оно выглядит.

 

 

Рис. 4.5 -  Отображение файла html в Internet Explorer

 

Обратите внимание, что свойство nodeName узла Attribute содержит имя атрибута, в то время как свойство nodeValue содержит значение атрибута.

 

Примечание. В действительности узел  Attribute  имеет дочерний узел Text, который содержит значение атрибута. Однако этот узел практически не нужен, поскольку вы легко можете получить значение атрибута из свойства nodeValue узла Attribute. В связи с этим данный тип дочернего узла Text в этой лекции не рассматривается.

Вы можете извлечь определенный узел Attribute из объекта NamedNodeMap, вызвав метод getNamedItem данного объекта. Например, следующий фрагмент кода сценария отображает значение атрибута Binding первого элемента BOOK в рассматриваемом документе:

 

NamedNodeMap = Document.documentElement.childNodes(0). attributes; alert (NamedNodeMap.getNamedItem("Binding").nodeValue);

 

На рисунке 4.6 показано как выглядит предупреждающее сообщение.

 

 

Рис. 4.6 - Предупреждающее сообщение в Internet Explorer

 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 274; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.01 с.)
Главная | Случайная страница | Обратная связь