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)
Примітка: Якщо прикладна програма не використовує структуру відповідну DOM, класи XmlTextReader і XmlTextWriter забезпечують швидкий (non-cached) потік forward-only доступу до XML (див. П. 2. Читання і запис Xml).
3.1. Фундаментальні класи Xml DOM
Являє одиночний вузол в дереві документа - основний клас для доступу до даних в моделі Xml об'єкта. XmlNodeType визначає допустимі типи вузла. Цей тип вузла включає підтримку для типів даних, просторів імен, і визначень типів документа (Document Type Definitions - DTDs).
Являє впорядковану сукупність вузлів. Підтримує ітераційні та індексні методи доступу до реальної сукупності об'єктів XmlNode. Цей об'єкт негайно відображає зміни в документі.
Представляє сукупність вузлів, до яких можна звертатися по імені або за індексом. Про беспечівает ітерацію і доступ на ім'я.
3.2. Просунуті класи Xml DOM
Мова піде про розширення фундаментальних класів для high-level об'єктів кожного типу вузла в документі Xml. Більшість high-level об'єктів успадковують властивості і методи основного об'єкта XmlNode, і додають йому властивості і методи, що вимагаються для high-level об'єкта.
Являє текстовий контент елемента або атрибута.
3.3. XmlNavigator і підтримка Xpath
Абстрактний клас XmlNavigator забезпечує ефективні засоби дослідження і редагування XML даних в XML документі. Він підтримує вираження Xpath, і може використовуватися як вхідний параметр класу XslTransform, який забезпечує виконання і XSLT перетворення. DocumentNavigator реалізує XmlNavigator для XmlDocument і DataDocumentNavigator реалізує це для XmlDataDocument.
XmlNavigator має наступні методи і властивості:
Основна модель даних для XmlNavigator та ж сама що і в DOM. XmlNavigator забезпечує віртуальне вікно в дерево вузлів і допускає такі розгалуження:
- Коли віртуальний вузол, на який вказує XmlNavigator, видалений з дерева або переміщений в інше дерево, XmlNavigator продовжує вказувати на цей переміщений вузол, і MoveToParent може переміщатися в абсолютно іншому вузлі.
- MoveToNext і MoveToPrevious не виходять за кінець списку, залишаючи, таким чином, XmlNavigator в невизначеному стані.
- Коли віртуальний вузол, на який вказує XmlNavigator, переміщений в інше місце дерева, XmlNavigator переміститися разом з ним.
- XmlNavigator завжди позиціонується на вузол. У разі збою використання методу, яка зачепила листя, XmlNavigator вкаже, де це сталося.
Перевірка і обхід стану 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, щоб обробити елементи