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

7.7. Использование других способов доступа к элементам

В рассмотренных примерах сценариев доступ к узлам Element в иерархической структуре осуществлялся с использованием свойств childNodes или firstChild узла. При этом происходил переход от одного узла к другому. Аналогичным образом можно применять свойства узла lastChild, previousSibling, nextSibling и parentNode (см. таблицу 5.21).

Свойства childNodes, firstChild и lastChild дают возможность доступа только к дочерним узлам, которые не являются атрибутами, в то время как свойства previousSibling и nextSibling могут быть использованы для доступа к вершинному узлу любого типа.

Другим способом доступа к XML-элементам является использование свойства getElementsByTagName, которое позволяет извлечь все элементы, имеющие определенное имя типа (например, TITLE). Этот метод может использоваться для узла Document (см. таблицу 5.22), а также для узла Element (см. таблицу 5.25). При обращении к методу для узла Document, он возвращает набор узлов Element для всех элементов в документе, обладающих заданным именем типа. Например, следующий оператор позволяет получить группу узлов для всех элементов в документе, обладающих именем BOOK:

NodeList = Document.getElementsByTagName("BOOK");

При обращении к методу getElementsByTagName для узла Element, как в следующем примере, он возвращает набор узлов для всех соответствующих элементов, которые являются подчиненными для узла Element:

NodeList = Element.getElementsByTagName("AUTHOR");

Если в качестве параметра метода getElementsByTagName указать «*», то метод вернет набор узлов для всех элементов (всех элементов в документе при вызове метода для объекта Document, и всех подчиненных элементов, при вызове метода для объекта Element).

Таблица 5.25

Полезные методы, поддерживаемые узлами Element.

Метод

Описание

Пример

getAttribute (имя-amp)

Возвращает значение атрибута элемента с заданным именем

AttValue = Bement.getAttribute ("InStock");

getAttributeNode (имя-amp)

Возвращает узел Arrtibute, представляющий атрибут элемента с заданным именем

Attribute = BementgetAttributeNode ("InStock");

getElementsBy TagName (имя-типа)

Возвращает набор NodeList узлов Element для всех подчиненных элементов элемента с заданным именем. Если указано «*», возвращает узлы для всех подчиненных элементов

AuthorElementCollection = Bement.getElementsByTagName("AUTHOR");

Для узлов Element также можно применять общие свойства узлов, приведенные в таблице 5.21.

Метод getElementsByTagName предоставляет узлы Element в виде группового объекта NodeList. Доступ к отдельным узлам осуществляется с помощью действий, описанных в разделе «Использование объекта NodeList» ранее в этой главе. Например, следующий код отображает (в окне предупреждения) текстовое содержимое всех узлов Element в объекте NodeList, возвращенное методом getElementsByTagName:

for (i=0; i < NodeList.length; ++i)

alert (NodeList(i).text);

HTML-страница из Листинга 1.29 демонстрирует использование метода getElementsByTagName для узла Document. Страница отображает поле ввода INPUT типа TEXT, которое дает вам возможность ввести имя элемента. При щелчке мышью на кнопке Show Elements, вызывается функция ShowElements сценария, которая использует метод getElementsByTagName для узла Document, чтобы найти и отобразить XML-разметку для всех элементов в документе, которые носят введенное имя элемента (если они имеются). Заметим, что сценарий использует свойство xml каждого из узлов Element для отображения содержимого XML-разметки элемента. Страница изначально связана с документом из листинга 1.1, хотя можно отредактировать фрагмент данных, чтобы отобразить элементы из другого XML-документа. На рисунке 49 показано как Internet Explorer отобразит страницу после того, как в поле ввода INPUT было введено имя AUTHOR и был произведён щелчок мышью на кнопке “Показать элементы”.

<HTML>

<HEAD>

<TITLE>Поиск элемента</TITLE>

<SCRIPT LANGUAGE ="JavaScript">

function ShowElements()

{

/*проверка ввода пользователем названия элемента в поле 'Имя элемента':*/

if (ElementName.value =="")

{

ResultDiv.innerText="<Вы должны ввести имя элемента в поле 'Имя элемента'>";

return;

/*создание списка элементов NodeList с именами, аналогичными введенному: */

Document = dsoXML.XMLDocument;

NodeList = Document.getElementsByTagName(ElementName.value);

/* запись XML указателя для каждого найденного элемента в ResultHTML*/

ResultHTML ="";

for (i=0; i < NodeList.length; ++i)

ResultHTML += NodeList(i).xml + "\n\n";

/* назначение сохраненных результатов в свойстве innerText элемента DIV*/

if (ResultHTML =="")

ResultDiv.innerText = "<элементы не найдены>";

else

ResultDiv.innerText = ResultHTML;}

</SCRIPT>

</HEAD>

<BODY>

<XML ID="dsoXML" SRC="Inventory.xml"></XML>

<H2>Поиск элемента по его имени</H2>

Имя элемента: <INPUT TYPE="TEXT" ID="ElementName"> 

<BUTTON ONCLICK="ShowElements()">Показать элементы</BUTTON>

<HR>

<DIV ID=ResultDiv></DIV>

</BODY>

</HTML>

Листинг 1.29

Рисунок 49. Поиск элемента по его имени