Основы XML

       

Структура DOM


В DOM программные объекты, представляющие XML-документ, называются узлами. Когда Internet Explorer 5 обрабатывает связанный XML-документ и сохраняет его в DOM, он создает узел для каждого из основных компонентов XML-документов, таких как элементы, атрибуты и инструкции по обработке.

DOM использует различные типы узлов для представления различных типов компонентов XML. Например, элемент хранится в узле Element, а атрибут – в узле Attribute. В таблице 9.1 представлены наиболее важные типы узлов.

Таблица 9.1. Основные типы узлов, используемых для представления различных компонентов XML-документа. Каждый тип узла представляет собой программный объект, который обеспечивает свойства и методы для доступа к соответствующему компоненту

Тип узлаКомпоненты XML-документа, представляемые узломИмя узла (свойство nodeName объекта)Значение узла (свойство nodeValue объекта)
DocumentКорневой узел иерархии документа (т. е. он представляет весь XML-документ)#documentnull
ElementЭлементИмя типа элемента (например, BOOK)null (любые символьные данные, содержащиеся в элементе, находятся в одном или нескольких дочерних узлах Text)
TextТекст, принадлежащий элементу, атрибуту или примитиву, которые представлены родителем этого узла#textТекст родительского XML-компонента
AttributeАтрибут (а также другие пары имя-значение, такие как имя и значение в инструкции по обработке)Имя атрибута (например, Binding)Значение атрибута (например, hardcover)
Processing-InstructionИнструкция по обработке (объявление XML или пользовательская инструкция по обработке)Предназначение инструкции по обработке (например, xml)Полное содержимое инструкции по обработке, за исключением предназначения (например, version="1.0")
CommentКомментарий#commentВесь текст внутри ограничителей комментария
CDATASectionРаздел CDATA#cdata-sectionСодержимое раздела CDATA
DocumentTypeОбъявление типа документаИмя корневого элемента, содержащееся в объявлении DOCTYPE (например, INVENTORY)null
EntityОбъявление примитива в DTDИмя примитива (например, image)null (значение примитива содержится в дочернем узле Text)
NotationОбъявление нотации в DTDИмя нотации (например, BMP)null (системный литерал нотации содержится в дочернем узле Attribute с именем SYSTEM)

Листинг 9.1. Inventory Dom.xml

Каждый узел, как программный объект, имеет свойства и методы, которые позволяют вам осуществлять доступ, отображать, обрабатывать и получать информацию о соответствующем компоненте XML. Например, свойства nodeName и nodeValue (см. таблицу 9.1) дают имя компонента и его значение.

Все типы узлов используют общий набор свойств и методов. Эти свойства и методы разработаны для работы с узлами вообще. В таблице 9.2 представлены некоторые наиболее полезные свойства. Более подробную информацию и примеры использования этих свойств вы найдете далее в этой лекции.

Таблица 9.2. Некоторые полезные свойства, поддерживаемые всеми типами узловСвойствоОписаниеПример
AttributesМножество NamedNodeMap всех дочерних узлов-атрибутов данного узлаAttributeNode = Element.attributes.getNamedItem ("Binding");
childNodesМножество NodeList всех дочерних узлов, не являющихся атрибутами, данного узлаFirstNode = Element.childNodes (0);
dataTypeТип данных этого узла (применительно только к определенным типам узлов Attribute)AttributeType = Attribute.dataType;
firstChildПервый дочерний узел данного узла, не являющийся атрибутомFirstChildNode = Element.firstChild;
lastChildПоследний дочерний узел данного узла, не являющийся атрибутомLastChildNode = Element.lastChild;
nextSiblingСледующий узел на том же уровне данного узлаNextElement = Element.nextSibling;
nodeNameИмя данного узлаElementName = Element.nodeName;
nodeTypeЦифровой код, указывающий на тип данного узлаNodeTupeCode = Node.nodeType;
nodeTypeStringСтрока, содержащая тип данного узла, строчными буквами (например, "element" или "attribute")NodeTypeString = Node.nodeTypeString;
nodeValueЗначение данного узла (или null, если он не содержит значения)AttributeValue = Attribute.nodeValue;
ownerDocumentКорневой узел Document документа, содержащего данный узелDocument = Node.ownerDocument;
parentNodeУзел, для которого данный узел является дочерним (не действует для узла Attribute)ParentElement = Element.parentNode;
previousSiblingПредыдущий узел на том же уровне данного узлаPreviousElement = Element.previousSibling;
textВсе текстовое содержимое данного узла и все подчиненные узлы ElementAllCharacterData = Element.text;
xmlВсе содержимое XML данного узла и все его подчиненные узлыXMLContent = Element.xml;


Подсказка. Если вы хотите познакомиться со всеми свойствами, методами и событиями, принадлежащими различным типам объектов-узлов, обратитесь к следующей Web-странице, предоставленной MSDN: http://msdn.microsoft.com/xml/reference/scriptref/xmldom_Objects.asp. Обратите внимание, что на этой странице каждому имени узла, которые приведены в Таблице 9.1, предшествует префикс XMLDOM – например, XMLDOMDocument, XMLDOMElement и XMLDOMText. (Это имена программных интерфейсов для каждого типа узла.) Обратите внимание также, что общие свойства и методы узлов представлены под именем XMLDOMNode.

Помимо общих свойств и методов, каждому типу узла присущи дополнительные свойства и методы, разработанные для работы с определенным XML-компонентом, который представляет узел. Например, узел Document имеет свойство parseError, которое содержит информацию о любой ошибке, возникающей в процессе обработки документа. Данное свойство присуще только узлу Document. Далее в этой лекции вы познакомитесь с таблицей 9.3, в которой представлены наиболее полезные свойства и методы для некоторых типов узлов.

Подсказка. Свойство будет иметь значение null, если данное свойство не применимо к определенному узлу. Например, если узел представляет XML-компонент, который не имеет атрибутов (например, узел Document или Comment), его свойство attributes будет иметь значение null. Если узел представляет XML-компонент, который не имеет типа данных (тип данных имеют только определенные атрибуты), его свойство dataType будет иметь значение null. Если узел не имеет дочернего узла, не являющегося атрибутом, его свойство firstChild будет иметь значение null. Если узел относится к типу, который не имеет значений (например, узел Document или Element), его свойство nodeValue также будет иметь значение null

Обратите внимание в таблице 9.2, что каждый узел обладает набором свойств, которые позволяют вам перемещаться в иерархии узла – т. е. получать доступ к другим узлам от текущего узла. Например, рассмотрим документ из Листинга 9.1. Если переменная Document содержит корневой узел Document, следующий код приведет к отображению содержимого комментария, расположенного в начале документа (этот комментарий DOM хранит как второй дочерний узел узла Document):

alert (Document.childNodes(1).nodeValue);

Эта строка вызовет отображение сообщения, содержащего текст "Имя файла: Inventory Dom.xml".

В предыдущем разделе вы узнали, как осуществлять доступ к корневому узлу Document через член XMLDocument DSO, который получается из фрагмента данных XML. Узел Document является шлюзом к XML-документу. Вы можете использовать его для доступа к другим узлам. В последующих разделах вы познакомитесь с особыми способами доступа к узлам.


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