Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_XML.doc
Скачиваний:
16
Добавлен:
03.05.2019
Размер:
3.94 Mб
Скачать

Лабораторная работа №11

  1. Используя структуру DOM, создайте на HTML-странице сценарий для отображения в браузере XML-документа из лабораторной работы №5.

  2. Добавьте к данному сценарию возможность поиска элементов, в которые вложены данные о студентах.

  3. Оформите HTML-страницу по согласованию с преподавателем.

  4. Сохраните XML-документ и HTML-страницу в папке под своей фамилией.

  5. Откройте для просмотра созданную HTML-страницу в браузере Internet Explorer.

  6. При появлении сообщений об ошибках, постарайтесь их найти и устранить.

  7. Сдайте работу преподавателю.

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

Свойство NamedNodeMap

Свойство

Описание

Пример

length

Количество узлов, содержащихся в наборе

AttributeCount = Element.attributes.length;

Метод NamedNodeMap

Метод

Описание

Пример

getNamed-Item(имя-атр)

Возвращает узел, который носит заданное имя

Attribute = Element.attributes.getNamed-Item("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 ("имя узла:" + 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. Отображение значения атрибута