Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ Программирование на С# _Хотов.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2.22 Mб
Скачать
      1. Изменение xml-документа

Для редактирования xml-документа (изменения, добавления, удаления элементов) мы можем воспользоваться методами классаXmlNode:

  • AppendChild: добавляет в конец текущего узла новый дочерний узел

  • InsertAfter: добавляет новый узел после определенного узла

  • InsertBefore: добавляет новый узел до определенного узла

  • RemoveAll: удаляет все дочерние узлы текущего узла

  • RemoveChild: удаляет у текущего узла один дочерний узел и возвращает его

Класс XmlElement, унаследованный от XmlNode, добавляет еще ряд методов, которые позволяют создавать новые узлы:

  • CreateNode: создает узел любого типа

  • CreateElement: создает узел типа XmlDocument

  • CreateAttribute: создает узел типа XmlAttribute

  • CreateTextNode: создает узел типа XmlTextNode

  • CreateComment: создает комментарий

Возьмем xml-документ из прошлой темы и добавим в него новый элемент:

XmlDocument xDoc = new XmlDocument();

xDoc.Load("users.xml");

XmlElement xRoot = xDoc.DocumentElement;

// создаем новый элемент user

XmlElement userElem = xDoc.CreateElement("user");

// создаем атрибут name

XmlAttribute nameAttr = xDoc.CreateAttribute("name");

// создаем элементы company и age

XmlElement companyElem = xDoc.CreateElement("company");

XmlElement ageElem = xDoc.CreateElement("age");

// создаем текстовые значения для элементов и атрибута

XmlText nameText = xDoc.CreateTextNode("Mark Zuckerberg");

XmlText companyText = xDoc.CreateTextNode("Facebook");

XmlText ageText = xDoc.CreateTextNode("30");

//добавляем узлы

nameAttr.AppendChild(nameText);

companyElem.AppendChild(companyText);

ageElem.AppendChild(ageText);

userElem.Attributes.Append(nameAttr);

userElem.AppendChild(companyElem);

userElem.AppendChild(ageElem);

xRoot.AppendChild(userElem);

xDoc.Save("users.xml");

Добавление элементов происходит по одной схеме. Сначала создаем элемент (xDoc.CreateElement("user")). Если элемент сложный, то есть содержит в себе другие элементы, то создаем эти элементы. Если элемент простой, содержащий внутри себя некоторое текстовое значение, то создаем этот текст (XmlText companyText = xDoc.CreateTextNode("Facebook");).

Затем все элементы добавляются в основной элемент user, а тот добавляется в корневой элемент (xRoot.AppendChild(userElem);).

Чтобы сохранить измененный документ на диск, используем метод Save: xDoc.Save("users.xml")

После этого в xml-файле появится следующий элемент:

<user name="Mark Zuckerberg">

<company>Facebook</company>

<age>30</age>

</user>

        1. Удаление узлов

Удалим первый узел xml-документа:

XmlDocument xDoc = new XmlDocument();

xDoc.Load("users.xml");

XmlElement xRoot = xDoc.DocumentElement;

XmlNode firstNode = xRoot.FirstChild;

xRoot.RemoveChild(firstNode);

xDoc.Save("users.xml");

      1. Linq to Xml. Создание Xml-документа

Еще один подход к работе с Xml представляет технология LINQ to XML. Вся функциональность LINQ to XML содержится в пространстве имен System.Xml.Linq. Рассмотрим основные классы этого пространства имен:

  • XAttribute: представляет атрибут xml-элемента

  • XComment: представляет комментарий

  • XDocument: представляет весь xml-документ

  • XElement: представляет отдельный xml-элемент

Ключевым классом является XElement, который позволяет получать вложенные элементы и управлять ими. Среди его методов можно отметить следующие:

  • Add(): добавляет новый атрибут или элемент

  • Attributes(): возвращает коллекцию атрибутов для данного элемента

  • Elements(): возвращает все дочерние элементы для данного элемента для данного элемента

  • Remove(): удаляет данный элемент из родительского объекта

  • RemoveAll(): удаляет все дочерние элементы и атрибуты у данного элемента

Итак, используем функциональность LINQ to XML и создадим новый XML-документ:

XDocument xdoc = new XDocument();

// создаем первый элемент

XElement iphone6 = new XElement("phone");

// создаем атрибут

XAttribute iphoneNameAttr = new XAttribute("name", "iPhone 6");

XElement iphoneCompanyElem = new XElement("company", "Apple");

XElement iphonePriceElem = new XElement("price", "40000");

// добавляем атрибут и элементы в первый элемент

iphone6.Add(iphoneNameAttr);

iphone6.Add(iphoneCompanyElem);

iphone6.Add(iphonePriceElem);

// создаем второй элемент

XElement galaxys5 = new XElement("phone");

XAttribute galaxysNameAttr = new XAttribute("name", "Samsung Galaxy S5");

XElement galaxysCompanyElem = new XElement("company", "Samsung");

XElement galaxysPriceElem = new XElement("price", "33000");

galaxys5.Add(galaxysNameAttr);

galaxys5.Add(galaxysCompanyElem);

galaxys5.Add(galaxysPriceElem);

// создаем корневой элемент

XElement phones = new XElement("phones");

// добавляем в корневой элемент

phones.Add(iphone6);

phones.Add(galaxys5);

// добавляем корневой элемент в документ

xdoc.Add(phones);

//сохраняем документ

xdoc.Save("phones.xml");

Чтобы создать документ, нам нужно создать объект класса XDocument. Это объект самого верхнего уровня в хml-документе.

Элементы создаются с помощью конструктора класса XElement. Конструктор имеет ряд перегруженных версий. Первый параметр конструктора передает название элемента, например, phone. Второй параметр передает значение этого элемента.

Создание атрибута аналогично созданию элемента. Затем все атрибуты и элементы добавляются в элементы phone с помощью метода Add().

Так как документ xml должен иметь один корневой элемент, то затем все элементы phone добавляются в один контейнер - элемент phones.

В конце корневой элемент добавляется в объект XDocument, и этот объект сохраняется на диске в xml-файл с помощью методаSave().

Если мы откроем сохраненный файл phones.xml, то увидим в нем следующее содержание:

<?xml version="1.0" encoding="utf-8"?>

<phones>

<phone name="iPhone 6">

<company>Apple</company>

<price>40000</price>

</phone>

<phone name="Samsung Galaxy S5">

<company>Samsung</company>

<price>33000</price>

</phone>

</phones>

Конструктор класса XElement позволяют задать набор объектов, которые будут входить в элемент. И предыдущий пример мы могли бы сократить следующим способом:

XDocument xdoc = new XDocument(new XElement("phones",

new XElement("phone",

new XAttribute("name", "iPhone 6"),

new XElement("company", "Apple"),

new XElement("price", "40000")),

new XElement("phone",

new XAttribute("name", "Samsung Galaxy S5"),

new XElement("company", "Samsung"),

new XElement("price", "33000"))));

xdoc.Save("phones.xml");