- •Тема 4. Формат даних xml. Основи.
- •4.1. Вступ у xml
- •4.3. Організація роботи із стандартом xml у .Net
- •4.3.1. Класи XmlTextReader і XmlTextWriter
- •4.3.2. Обробка xml у пам’яті
- •XmlDocument
- •Класи XmlNode та XmlLinkedNode
- •Клас XmlDeclaration
- •Класи XmlComment та XmlAttribute
- •Клас XmlElement
- •Клас XmlDocument
- •Приклад сторення, навігації та пошук даних
- •4.3.3. Трансформація xml
4.3.2. Обробка xml у пам’яті
Заснована на потоках обробка XML забезпечує мінімальні накладні витрати, але також володіє мінімальної гнучкістю. На багато зручнішою є обробка XML в пам'яті. На жаль, єдиного стандартного підходу до такої обробки не існує.
Всі перераховані нижче класи дозволяють працювати із XML - файлом у пам’яті.
1) XmlDocument. Клас XmlDocument реалізує повний інтерфейс XML DOM Level 2 Core, як він визначений W3C. Це найбільш стандартизований інтерфейс для роботи із даними XML, але місцями є не зовсім зручним.
2) XpathNavigator. Як і XmlDocument, клас XpathNavigator зберігає XML- документ цілком в пам'яті. Однак він забезпечує трохи швидшу і прямолінійну модель, ніж XML DOM, поряд з розширеними засобами пошуку. На відміну від XmlDocument, в ньому не передбачена можливість внесення і збереження змін.
3) XDocument. Клас XDocument пропонує ще більш інтуїтивно зрозумілий і ефективний API-інтерфейс для взаємодії з XML. Формально він являє собою частину LINQ to XML, але зручний і в тому випадку, коли запити LINQ не використовуються. Однак через новизну XDocument повинен працювати спільно з більш старими класами .NET XML для вирішення таких задач, як перевірка дійсності. Також XDocument не підтримує веб-елемент управління Xml, який дозволяє більш просто відображати XML на веб-сторінці.
XmlDocument
Розглянемо перший підхід. Основними класами при цьому підході є:
Клас |
Призначення |
XmlNode |
Представляє окремий вузол |
XmlLinkedNode |
Представляє впорядковану колекцію вузлів |
XmlDeclaration |
Представляє рядок декларації |
XmlComment |
Представляє коментар |
XmlAttribute |
Представляє атрибут |
XmlElement |
Представляє елемент |
XmlDocument |
Представляє XML-документ |
XmlTextReader |
Представляє засіб зчитування із файлів даних стандарту XML |
XmlTextWriter |
Представляє засіб запису у файли даних стандарту XML |
Класи XmlNode та XmlLinkedNode
Ці класи є базовими для класів XmlDeclaration, XmlComment, XmlDocument, XmlElement. Абстрактний клас XmlNode представляє окремий вузол XML-документа. Серед членів цього класу відмітимо тільки наступні:
Елемент класу XmlNode |
Призначення |
public virtual XmlAttributeCollection Attributes { get; } |
Повертає атрибути даного вузла у вигляді екземпляру колекції XmlAttributeCollection. |
public virtual XmlNodeList ChildNodes { get;} |
Повертає всі дочірні вузли для даного. |
public virtual XmlNode FirstChild { get; } |
Повертає перший дочірній вузол для даного вузла. |
public virtual XmlNode LastChild { get; } |
Повертає останній дочірній вузол для даного вузла. |
public virtual string InnerText { get; set; } |
Повертає або задає вміст даного вузла. |
public virtual string InnerXml { get; set; } |
Повертає або задає розмітку, яка представляє дочірні вузли даного вузла. |
public virtual XmlNode AppendChild(XmlNode newChild); |
Додає вказаний вузол у список дочірніх вузлів даного вузла. |
public virtual XmlNode InsertAfter(XmlNode newChild, XmlNode refChild); |
Вставляє заданий вузол newChild зразу після даного вузла refChild. |
public virtual XmlNode InsertBefore(XmlNode newChild, XmlNode refChild); |
Вставляє заданий вузол newChild зразу перед даним вузлом refChild. |
public virtual void RemoveAll(); |
Видаляє всі дочірні вузли і (або) атрибути поточного вузла. |
public virtual XmlNode RemoveChild(XmlNode oldChild); |
Видаляє вказаний дочірній вузол. |
public virtual XmlNode ReplaceChild(XmlNode newChild, XmlNode oldChild); |
Замінює дочірній вузол oldChild на вузол newChild. |
Абстрактний клас XmlLinkedNode є похідним від класу XmlNode та представляє XML-документ у вигляді впорядкованої колекції його вузлів. У цьому класі перевизначено всього дві успадковані властивості:
Елемент класу XmlLinkedNode |
Призначення |
public override XmlNode NextSibling { get; } |
Повертає наступний вузол у колекції після поточного. |
public override XmlNode PreviousSibling { get; } |
Повертає попередній вузол у колекції перед поточним. |