Книга: ASP.NET MVC Framework

XML-данные

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, что на практике делать обязательно.

Оглавление книги


Генерация: 0.669. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз