Извлечение символьных данных элемента
В сценарии, представленном в Листинге 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.
Length | Количество символов в тексте узла | CharacterCount = Text.length; |
substringData (char-offset, num-chars) | Возвращает строку, содержащую заданное число символов из текстового содержимого узла, начиная с указанной параметром смещения позиции | Substring = Text.substringData (2, 3); (Возвращает третий, четвертый и пятый символы из содержимого элемента Text) |