Основы XML

       

Извлечение символьных данных элемента


В сценарии, представленном в Листинге 9.3, свойство text каждого из дочерних элементов (TITLE, AUTHOR, BINDING, PAGES и PRICE) используется для получения символьных данных элемента. Например, следующий оператор используется для извлечения символьных данных элемента TITLE:

title.innerText= Document.documentElement.childNodes(0).text;

Свойство text показывает содержимое элемента в текущем узле, плюс текстовое содержимое любого подчиненного элемента. Оно хорошо подходит для извлечения символьных данных элемента в том случае, если элемент не имеет дочерних элементов (например, элемент TITLE). Однако если элемент содержит один или более дочерних элементов помимо символьных данных, как в приведенном ниже примере, свойство text возвращает весь текст (в данном случае, "Moby-Dick Or, the Whale").

<TITLE>Moby-Dick <SUBTITLE>Or, the Whale</SUBTITLE> </TITLE>

Чтобы получить только символьные данные элемента TITLE, вам потребуется осуществить доступ к дочернему узлу Text.

Как видно из таблицы 9.1, свойство nodeValue узла Element имеет значение null. Если элемент содержит символьные данные, то они хранятся в дочернем узле Text, и вы можете получить их через свойство nodeValue узла Text. Например, чтобы получить данные элемента TITLE ("Moby-Dick"), из предыдущего примера, без символьных данных, принадлежащих элементу SUBTITLE, используем следующее выражение:

Element.firstChild.nodeValue

(Поскольку символьные данные элемента TITLE предшествуют подчиненному элементу, они представляются первым дочерним узлом, и вы можете извлечь их с помощью свойства firstChild.)

Если символьные данные элемента смешаны с дочерними элементами, комментариями или инструкциями по обработке, каждый отдельный блок символьных данных представляется собственным дочерним узлом Text. Например, приведенный ниже элемент ITEM имеет три дочерних узла, расположенных в следующем порядке: узел TEXT, представляющий первый блок символьных данных; узел ELEMENT, представляющий дочерний элемент SUB-ITEM; еще один узел TEXT, представляющий второй блок символьных данных:


<ITEM> блок символьных данных № 1 /* узел TEXT */ <SUB-ITEM>текст подчиненного элемента</SUB-ITEM> блок символьных данных № 2 /* узел TEXT */ </ITEM>

Метод и свойство, предоставляемые узлом Text, приведены в таблице 9.5.

Таблица 9.5. Полезные свойство и метод, поддерживаемые узлами Text. Другие доступные свойства вы можете найти в перечне общих свойств в таблице 9.2Свойство узла TextОписание ПримерМетод узла TextОписаниеПример
LengthКоличество символов в тексте узлаCharacterCount = Text.length;
substringData (char-offset, num-chars)Возвращает строку, содержащую заданное число символов из текстового содержимого узла, начиная с указанной параметром смещения позицииSubstring = Text.substringData (2, 3);

(Возвращает третий, четвертый и пятый символы из содержимого элемента Text)


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