XML-данные

.NET Framework предлагает широкий ассортимент объектов для доступа к XML-данным, которые расположены в стандартных сборках: System.Xml, System.Xml.XPath, System.Xml.Xsl, System.Xml.Schema и System.Xml.Linq. Рассмотрим назначение и наиболее полезные классы каждой из сборок:

□ System.Xml — содержит базовые классы для работы с XML, такие как

XmlDocument, XmlElement, XmlNode и множество других, которые позволяют реализовать загрузку из файлов, обработку, добавление, изменение, удаление XML-данных;

□ System.Xml.XPath — содержит классы для реализации работы механизма XPath, позволяющего писать выражения к XML-документу для поиска необходимых данных;

□ System.Xml.Xsl — содержит классы для поддержки реализации XSLT-преобразований XML-документа;

□ System.Xml.Schema — содержит классы для поддержки XSD-схем и валидации XML-данных на их основе. Содержит большое число классов, позволяющих создавать XSD-схемы и использовать их;

□ System.Xml.Lin —  последняя сборка, которая недавно появилась в .NET Framework. Содержит классы, реализующие механизм доступа к XML-данным на основе LINQ-выражений. Этот механизм носит собственное название LINQ для XML. Он позволяет использовать уже известные вам LINQ-выражения для обработки XML-данных.

Рассмотрим пример обработки XML-данных с помощью LINQ для XML. Предположим, что у нас есть следующий XML-файл:

<?xml version="1.0"?>

<Orders>

  <Order OrderId="99" OrderDateTime="01.02.2009">

    <Address>

      <Name>Владимир Иванов</Name>

      <Street>yn. CTpoMTanefr</Street>

      <House>12</House>

      <Apartment>23</Apartment>

      <City>MocKBa</City>

      <Zip>100888</Zip>

      <Country>Россия</Country>

    </Address>

  </Order>

  <Order OrderId="100" OrderDateTime="01.02.2009">

    <Address>

      <Name>Сергей Петров</Name>

      <Street>ул. Бажова</Street>

      <House>76</House>

      <Apartment>123</Apartment>

      <City>Eкатеринбург</City>

      <Zip>620000</Zip>

      <Country>Россия</Country>

    </Address>

  </Order>

</Orders>

Для получения имени по номеру ордера, используя LINQ для XML, мы можем написать следующий код:

XDocument xdoc =

XDocument.Load("D:CPS#ProjectsMVCBookMVCBookOrder.xml");

IEnumerable<XElement> orders =

  xdoc.Element("Orders").Descendants("Order");

int orderId = 100;

IEnumerable<XElement> order =

  orders.Where(x => x.Attribute("OrderId").Value == orderId.ToString());

XElement address = order.Select(x => x.Element("Address"))

  .FirstOrDefault();

string name = address.Element("Name").Value;

В данном примере загружается файл orders.xml, в переменной orders присваиваются все заявки (элементы Order в XML-файле). Затем с помощью LINQ-запроса находится заявка с идентификатором 100. После этого выбирает элемент адреса заявки и, в завершение, из адреса извлекается имя.

Стоит отметить, что в данном примере не производились проверки возвращаемых значений на null, что на практике делать обязательно.

Более 800 000 книг и аудиокниг! 📚

Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением

ПОЛУЧИТЬ ПОДАРОК