Доступ к данным |Доступ к XML и реляционным данным | 3. Исполнение Document Object Model (DOM) Дальше »
3. Исполнение Document Object Model (DOM)
3.1. Фундаментальные классы Xml DOM
3.2. Продвинутые классы Xml DOM
3.3. XmlNavigator и поддержка Xpath
3.4. XslTransform и поддержка XSLT
3.5. Абстрактный класс XmlResolver

3. Исполнение Document Object Model (DOM)

Микрософт .NET Framework SDK использует W3C Document object Model (DOM) level 1 Core и Core DOM Level 2. DOM - это memory-resident (кэш) представление дерева Xml документа и допускает навигацию и редактированию этого документа.
Класс XmlNode (System.Xml.XmlNode) - это воплощение W3C Document Object Model (DOM). Обеспечивается поддержка, как DOM Level 1, так и DOM Level 2. Класс XmlDocument (System.Xml.XmlDocument)) является расширением XmlNode, и поддерживает методы для выполняющихся операций над документом в целом, например, загрузка или сохранение в XML файле.
XmlDocument обеспечивает средства просмотра и управления узлами полного XML документа, а не только текущий (current) узел, который представляет XmlNavigator.
XmlDocument и XmlNode имеют следующие методы и свойства:
- Исследует и изменяет узлы, определенные в DOM, например, атрибуты, элементы, символьные данные, текст, комментарии, обрабатываемые команды, и сущности.
- Изменение, удаление, и вставка текста в соответствующие DOM узлы.
- Восстановление полных узлов (например, полный узел "programming instruction") или индивидуальных частей узлов (например, только " target" узла "programming instruction").

Примечание: Если прикладная программа не использует структуру соответствующую DOM, классы XmlTextReader и XmlTextWriter обеспечивают быстрый (non-cached) поток forward-only доступа к XML (см. п. 2. Чтение и запись Xml).

3.1. Фундаментальные классы Xml DOM

Спецификация W3C Document Object Model (DOM) Level 1 (http://www.w3.org/TR/REC-DOM-Level-1) определяет две группы программных классов: основные и расширенные. Основные классы W3C включают всё необходимое для написания прикладных программ, которые управляют Xml документами. W3C определяет расширенные классы как те, которые могли бы сделать процесс программирования более удобным для разработчиков. Спецификации W3C Level 2 DOM (http://www.w3.org/TR/DOM-Level-2-Core/) включает поддержку пространств имён Xml и некоторые дополнительные особенности.
В таблице ниже указаны основные (фундаментальные) классы DOM, которые необходимы для написания прикладных программ, управляющих Xml документами.

Объект Описание
XmlNode Представляет одиночный узел в дереве документа - основной класс для доступа к данным в модели Xml объекта. XmlNodeType определяет допустимые типы узла. Этот тип узла включает поддержку для типов данных, пространств имён, и определений типов документа (Document Type Definitions - DTDs).
XmlNodeList Представляет упорядоченную совокупность узлов. Поддерживает итерационные и индексные методы доступа к реальной совокупности объектов XmlNode. Этот объект немедленно отражает изменения в документе.
XmlNamedNodeMap Представляет совокупность узлов, к которым можно обращаться по имени или по индексу. О беспечивает итерацию и доступ по имени.

3.2. Продвинутые классы Xml DOM

Речь пойдёт о расширениях фундаментальных классов для high-level объектов каждого типа узла в документе Xml. Большинство high-level объектов наследуют свойства и методы основного объекта XmlNode, и добавляют ему свойства и методы, требующиеся для high-level объекта.

Класс Описание
XmlDocument Class Представляет высший узел Xml документа. XmlDocument класс реализуется W3C Document Object Model (Core) Level 1 и DOM Core Level 2.
XmlAttribute Представляет атрибут XmlElement объекта. Допустимые значения и значения по умолчанию для атрибута определены в DTD или схеме.
XmlAttributeCollection Class Представляет атрибуты XmlElement. Допустимые значения и значения по умолчанию для атрибут определены в DTD (Document Type Definition) или схеме.
XmlCDataSection Кавычки или блоки вывода текста, необходимые для того, чтобы текст не интерпретировался как язык разметки.
XmlCharacterData Обеспечивает методы манипуляции текстом, которые используются несколькими объектами.
XmlComment Представляет контент Xml комментария.
XmlDeclaration Представляет декларацию Xml узлов, <?xml version='1.0' … ?>.
XmlDocumentFragment Представляет фрагмент или часть дерева документа. Это полезно для операций вставки дерева.
XmlDocumentType Содержит информацию, связанную с декларацией типа документа.
XmlElement Представляет объект элемент.
XmlEntity Представляет parsed или unparsed сущность в Xml документе.
XmlEntityReference Представляет сущности ссылки узла.
XmlImplementation Обеспечивает методы для выполнения операций, которые являются независимыми от любого специфического экземпляра объектной модели документа.
XmlNotation Содержит примечание, объявленное в DTD или схеме.
XmlLinkedNode Немедленно получает узел, предшествующий или последующий текущему узлу.
XmlNamedNodeMap Представляет совокупность узлов, к которым можно обращаться по имени или индексу.
XmlProcessingInstruction Представляет команду обработки, которая определяет Xml для сохранения processor-specific информации в тексте документа.
XmlSignificantWhitespace Представляет текстовый контент элемента или атрибута.
XmlWhitespace Представляет текстовый контент элемента или атрибута.
XmlText Представляет текстовый контент элемента или атрибута.

3.3. XmlNavigator и поддержка Xpath

Абстрактный класс XmlNavigator обеспечивает эффективные средства исследования и редактирования XML данных в XML документе. Он поддерживает выражения Xpath, и может использоваться как входной параметр класса XslTransform, который обеспечивает исполнение и XSLT преобразования. DocumentNavigator реализует XmlNavigator для XmlDocument и DataDocumentNavigator реализует это для XmlDataDocument.

XmlNavigator имеет следующие методы и свойства:

- Move, delete, insert и copy (перемещение, удаление, вставка и копирование) ветвей дерева узла в основном Xml документе. Текущий "current" узел остается узлом, на который осуществляется воздействие, даже если он перемещён, скопирован или изменён как-либо иначе.
- Создание клонов, каждый из которых может осуществлять независимую навигацию по Xml документу.
- Установка и определение свойств узла и атрибута.
- Перемещение "current" узла в заданный тип узла (возможные типы: first, last, next, child, parent).
- Перемещение по атрибутам в пределах узла.
- Выбор подмножества узлов, использующих выражение Xpath, и затем, перемещения по узлам в пределах этого подмножества.
- Move, copy, insert и delete для узла и его подузлов; то есть перемещение, копирование и так далее, целых ветвей дерева узла.

Основная модель данных для XmlNavigator та же самая что и в DOM. XmlNavigator обеспечивает виртуальное окно в дерево узлов и допускает следующие разветвления:

- Когда виртуальный узел, на который указывает XmlNavigator, удален из дерева или перемещен в другое дерево, XmlNavigator продолжает указывать на этот перемещённый узел, и MoveToParent может перемещаться в совершенно другом узле.
- MoveToNext и MoveToPrevious не выходят за конец списка, оставляя, таким образом, XmlNavigator в неопределенном состоянии.
- Когда виртуальный узел, на который указывает XmlNavigator, перемещён в другое место дерева, XmlNavigator переместиться вместе с ним.
- XmlNavigator всегда позиционируется на узел. В случае сбоя использования метода, затронувшего листья, XmlNavigator укажет, где это произошло.

XmlNavigator охватывает весь узел и свойства уровня атрибут поддерживаемые XmlReader (хотя их установка может быть изменена) и добавляет навигацию для произвольного доступа. Однако, XmlNavigator не строит дерево узла, что позволяет организовать работу в стиле курсора доступа к XML данным, строя единственный узел, когда происходит перемещение в него. API дает Вам возможность получить текущий узел и двигаться к связанным с ним узлам.
С помощью Xpath (http://www.w3.org/TR/Xpath), поддерживаемой и обеспеченной XmlNavigator, определите Xpath запросы (например. Books/Book/Price/Text) и перемещайтесь в явно заданные узлы. Метод Select предоставляет Вам возможность выбора из набора узлов с помощью выражения Xpath, а метод MoveToSelected даёт Вам возможность передвигаться в другие узлы в пределах выборки. Xpath - наиболее интуитивный и дружественный путь доступа к узлам.

Проверка и обход состояния Null

Если XmlNavigator находится в состоянии null, он временно не указывает ни на какой узел. Когда XmlNavigator переводится в позицию null (MoveTo (null)), происходит сбой операции редактирования с исключением InvalidPosition. Вы можете выяснять, находится ли объект XmlNavigator в состоянии null, проверив, возвращается ли NodeType 0. Вы можете вывести объект XmlNavigator из состояния null, используя MoveTo (XmlNavigator) или MoveToDocument.

3.4. XslTransform и поддержка XSLT

Хотя Xml документы структурированы, прикладные программы часто требуют, чтобы информация была структурирована по-другому. eXtensible Stylesheet Language (XSL) - это основанный на Xml язык, предназначенный для преобразования одного Xml документа в другой Xml, документ HTML или в любой другой структурированный документ. XSL основан на Xpath, что позволяет определять специфические части Xml документа и формулировать запросы.
Реализуется класс XslTransform в соответствии со спецификацией W3C XSL Transformations (XSLT). XslTransform загружает таблицу стилей XSLT, используя XmlReader и преобразовывает входные данные, использующие XmlNavigator.
Чтобы исполнять преобразования, Xml Framework использует процессор XSLT и лист стиля XSL, который сообщает им, как сделать преобразование. Лист стиля составлен из шаблонов, которые определяют, как каждый узел источника документа Xml должен появляться в результирующем Xml документе. Процессор XSLT работает одновременно с тремя деревьями, одно - это источник Xml, второе - для результирующей структуры и третье - для листа стиля.
Метод преобразований XslTransform преобразовывает данные в указанном XmlNavigator и выводит их в одно из следующих назначений:

- XmlReader
- XmlWriter
- TextWriter
- Stream

Обратите внимание, что выбранные преобразования оперируют с документом в целом. Другими словами, если текущий узел установлен на некотором дереве узла в отличном от корневого узле документа, это не исключает преобразование всех доступных узлов загруженного документа. После того, как преобразование было выполнено, XmlNavigator остаётся в его первоначальном состоянии. Это означает, что узел, который был текущий перед процессом преобразования, все ещё остаётся текущим узлом после того, как был вызван Transform метод.

3.5. Абстрактный класс XmlResolver

Абстрактный класс XmlResolver используется для разрешения внешних XML ресурсов. XmlUrlResolver реализует этот класс, чтобы разрешить такие XML ресурсы, как URI. Он используется XmlTextReader, чтобы загрузить внешние DTD, сущности и схемы. Он используется также XslTransform, чтобы обработать элементы <xsl:include>.

Доступ к данным |Доступ к XML и реляционным данным | 3. Исполнение Document Object Model (DOM) Дальше »
Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz