17322

Работа с XML в .NET

Лекция

Информатика, кибернетика и программирование

Лекция 8. Работа с XML в .NET План 1. Классы для работы с XML .NET 2. Чтение и запись потоков данных Xml 2.1. Использование класса XmlReader 2.2. Методы чтения данных 2.3. Контроль типов данных при чтении Xmlдокумента 3. Создание XMLдокумента в Visual Studio 1. Классы для работы с XML .NET Мно

Украинкский

2013-06-30

399.72 KB

13 чел.

Лекция 8. Работа с XML в .NET

План

1. Классы для работы с XML .NET

2. Чтение и запись потоков данных Xml

2.1. Использование класса XmlReader

2.2. Методы чтения данных

2.3. Контроль типов данных при чтении Xml-документа

3. Создание XML-документа в Visual Studio

1. Классы для работы с XML .NET

Многие составляющие технологии .NET неразрывно связаны с XML. А значит, XML хорошо поддерживается со стороны Framework Class Library. В .NET поддерживаются следующие технологии:

  1.  XML 1.0
  2.  пространства имен XML
  3.  XSD схемы
  4.  выражения XPath
  5.  XSL преобразования
  6.  DOM Level 1 Core, DOM Level 2 Core

Среда .NET Framework  не только позволяет применять XML в создаваемых приложениях, но и сама применяет его в конфигурационных файлах, документации по исходному коду и в манифесте сборки.

Пример 1. Манифест сборки

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

 <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>

 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">

   <security>

     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">

       <requestedExecutionLevel level="asInvoker" uiAccess="false"/>

     </requestedPrivileges>

   </security>

 </trustInfo>

</assembly>

Классы для работы с XML собраны в пространстве имен System.Xml. Это пространство загружается вместе с классами, которые могут использоваться для обработки данных XML.

Таблица 1. Основные классы чтения и записи данных XML

XmlReader

Абстрактный класс, выполняющий чтение и обеспечивающий быструю доставку некешированных данных XML. Класс представляет собой однонаправленный синтаксический анализатор

XmlWriter

Абстрактный класс, выполняющий запись данных в виде потока или файла

XmlTextReader

Расширяет возможности класса XmlReader. Обеспечивает однонаправленный потоковый доступ к данным XML

XmlTextWtiter

Расширяет возможности класса Xml.Writer. Обеспечивает быструю однонаправленную генерацию потоков XML

Таблица 2. Некоторые классы обработки данных XML

XmlNode

Абстрактный класс, представляющий один узел в XML-документе. Базовый класс для некоторых других классов

XmlDocument

Расширяет класс XmlNode. Представляет собой реализацию DOM от W3C. Обеспечивает древовидное представление XML-документа в памяти с возможностями навигации и редактирования

XmlNavigator

Обеспечивает навигацию по документу

XMLDataDocument

служит мостом между хранилищами данных и реляционными данными, хранящимися в DataSet

2. Чтение и запись потоков данных Xml

Среда .NET Framework  поддерживает два способа обработки  XML-документов: потоковый ввод-вывод и DOM. Абстрактные классы XmlReader, XmlWriter и порожденные от них классы поддерживают потоковую  модель ввода-вывода.

Классы, основанные на XmlReader обеспечивают быстрый однонаправленный курсор, который организует поток данных XML для обработки.

От XmlReader порождены следующие классы:

XmlNodeReader

использует XmlNode как источник вместо потока

XmlTextReader

Обеспечивает однонаправленный потоковый доступ к данным XML

XmlValidatingReader

добавляет определение шаблона DTD (Document TypeDefinition) и обеспечивает проверку достоверности данных

От XmlWriter  порождены следующие классы:

XmlTextWriter

Расширяет возможности класса Xml.Writer. Обеспечивает быструю однонаправленную генерацию потоков XML

XmlQueryOutput

Расширяет возможности класса Xml.Writer, Обеспечивает функциональность, необходимую для вывода результатов преобразований XSLT.

Для работы с данными каждый из классов предоставляет необходимые методы.

2.1. Использование класса XmlReader

Пример чтения данных XML из файла. Данные хранятся в файле "book2.xml" и представляют собой описание книжного каталога:

<?xml version="1.0" encoding="Windows-1251"?>

<INVENTORY>

  <BOOK>

     <TITLE>Страны Мира </TITLE>

     <AUTHOR>Книжний Клуб</AUTHOR>

     <BINDING>Харьков</BINDING>

     <PAGES>380</PAGES>

     <PRICE>$4.00</PRICE>

  </BOOK>

  <BOOK>

     <TITLE>Секреты работы в Windows</TITLE>

     <AUTHOR>Дэвид Маккормик</AUTHOR>

     <BINDING>Харьков</BINDING>

     <PAGES>300</PAGES>

     <PRICE>$5.20</PRICE>

  </BOOK>

  <BOOK>

     <TITLE>Выбор и модернизация компьютера</TITLE>

     <AUTHOR>Михаил Кутузов</AUTHOR>

     <BINDING>Питер - Москва </BINDING>

     <PAGES>320</PAGES>

     <PRICE>$6.30</PRICE>

  </BOOK>

  <BOOK>

     <TITLE>3d max</TITLE>

     <AUTHOR>Кэлли Мердок</AUTHOR>

     <BINDING>Киев-Москва</BINDING>

     <PAGES>1050</PAGES>

     <PRICE>$10.95</PRICE>

  </BOOK>

  <BOOK>

     <TITLE>Система Программирования Delphi</TITLE>

     <AUTHOR>Волков Андрей</AUTHOR>

     <BINDING>Москва</BINDING>

     <PAGES>800</PAGES>

     <PRICE>$10.95</PRICE>

  </BOOK>

  <BOOK>

     <TITLE>Как собрать свой компьютер</TITLE>

     <AUTHOR>Джон Косли</AUTHOR>

     <BINDING>Москва</BINDING>

     <PAGES>300</PAGES>

     <PRICE>$6.90</PRICE>

  </BOOK>

  <BOOK>

        <?MyApp Part="value 1" Parm2="value 2" ?>

        <TITEL>dfsdfdfsdf</TITEL>

        <AUTHOR>sdfsdf</AUTHOR>

        <!-- sdfsdfsdfsdf -->

        <BINDING>фіваваіва</BINDING>

        <PAGES>234</PAGES>

        <PRICE>$12.8</PRICE>

   </BOOK>

</INVENTORY>

Создадим форму с двумя кнопками и текстовым редактором (richTextBox1), в который будем размещать прочитанные данные.

При нажатии кнопки ReadXml выполняется чтение и разбор XML-файла и вывод его в текстовый редактор. Обработчик кнопки ReadXML_Click:

     private void ReadXML_Click(object sender, EventArgs e)

       {

           //чтение файла

           richTextBox1.Clear(); //очистка редактора

           XmlReader rdr = XmlReader.Create("book2.xml");//создание объекта rdr

           while (rdr.Read())

           {

               if (rdr.NodeType == XmlNodeType.Text)

                   richTextBox1.AppendText(rdr.Value + "\r\n");

           

           }

       }

Класс XmlReader является абстрактным, т.есть, для таких классов нельзя создавать объекты оператором new. Для того, чтобы его можно было использовать, нужно включить в него статические методы.  

В этом обработчике используется статический метод Create, который возвращает объект XmlReader.  Дальше в цикле while выполняется чтение каждой строки файла . По мере чтения производится проверка свойства NodeType. Если узел является текстовым, в текстовый редактор добавляется его содержимое.

2.2. Методы чтения данных

Классы для работы с XML  предоставляют несколько способов передвижения по XML-документу. Например, метод Read() перемещает на следующий узел. Потом можно проверить, имеет ли этот узел содержимое (HasValue() ) или атрибуты (YasAttributes()).  

Основные методы анализа документа представлены в таблице ниже.

Read() 

читает очередную запись и перемещает на следующий узел

HasValue()

возвращает true, если элемент имеет содержимое, false – противном случае

HasAttributes()

просматривает элемент на наличие атрибутов.  Возвращает true, если элемент имеет содержимое, false – противном случае

ReadStartElement()

проверяет, является ли узел корневым, после чего смещается на следующий узел. Если узел не корневой, возбуждается исключение  XmlException.

IsStartElement()

аналогичен методу ReadStartElement()

ReadString()

чтение одной строки из файла, содержащего документ

ReadElementString()

подобен методу ReadString() за исключением того, что ему можно передать имя элемента. Если следующий узел с содержимым не является начальным дескриптором или если параметр Name не совпадает с текущим параметром узла, возбуждается исключение

MoveToContent()

перемещение к содержимому узла

Пример 2. Вывод отдельных элементов XML-документа

Рассмотрим применения метода ReadElementString() и других методов, а также применение файловых потоков (чтения из файла).  

Не забыть  подключить  using System.IO;

Добавим на форму кнопку Read from file. Код обработчика будет следующим:

     private void btmReadXml2_Click(object sender, EventArgs e)

       {

           //чтение только название книг (элемент "TITLE"

           richTextBox1.Clear();

           FileStream fs = new FileStream("book2.xml", FileMode.Open);

           XmlReader rdr = XmlReader.Create(fs);

           while (!rdr.EOF)

           {

               //Если попадаем на тип элемента, проверить его и загрузить в окно

               if (rdr.MoveToContent() == XmlNodeType.Element && rdr.Name == "TITLE")

               {

                   richTextBox1.AppendText(rdr.ReadElementString() + "\r\n");

               }

               else

               {

                // в противном случае - переместиться на след.запись

                   rdr.Read();

               }

           }

  }

В этом примере в цикле while используется метод MoveToContent() для поиска узла типа XmlNodeType. Element с названием книги rdr.Name == "TITLE")

               

if (rdr.MoveToContent() == XmlNodeType.Element && rdr.Name == "TITLE")

Просмотр выполняется до конца файла (условие цикла

           while (!rdr.EOF)

Если типом узла не является элемент или его имя не совпадает с "TITLE", то вызывается метод Read() для перехода к следующему узлу. Если очередной узел "TITLE" найден, его содержимое добавляется в окно вывода. Таким образом, будут выведены только названия книг.

2.3. Контроль типов данных при чтении Xml-документа

Класс XmlReader также позволяет считывать данные со строгим контролем типов. Для этого используются методы ReadElementContentAs... ReadElementContentAsDouble(),  ReadElementContentAsBoolean() и другие. Далее показано как можно считывать значение в десятичном формате и выполнять вычисления.  В примере выбирается значение цены книги, которое увеличивается на 25%.

Создадим еще одну кнопку с надписью New Price, а в ее обработчике напишем код:

private void btnNewPrice_Click(object sender, EventArgs e)

{

 //Обработчик кнопки NewPrice - контроль типов

  richTextBox1.Clear();

  XmlReader rdr = XmlReader.Create("book2.xml");

  while (rdr.Read())

    {

     if (rdr.NodeType == XmlNodeType.Element)

      {

        if (rdr.Name == "PRICE")

         {

          decimal price = rdr.ReadElementContentAsDecimal();

          richTextBox1.AppendText("Curent Price = "+ price+ "\r\n");

          price += price * (decimal)0.25;

          richTextBox1.AppendText("New Price = " + price + "\r\n\r\n");

         }

        else if (rdr.Name=="TITLE")

          richTextBox1.AppendText(rdr.ReadElementContentAsString()+"\r\n");

      }

    }

   rdr.Close();

}

Если это значение не может быть преобразовано к требуемому типу, возбуждается исключение FormatException.

Компилируем и запускаем на выполнение наш проект.

В результате получаем сообщение об ошибке. Причина – текст элемента имеет вид:

     <PRICE>$10.95</PRICE>

Исправим все элементы <PRICE> 10.95</PRICE>,

а  документ сохраним под именем ("book3.xml");

В результате  получим:

3. Создание XML-документа в Visual Studio

Для создания  XML-файла в среде Visual Studio  нужно в меню File выбрать New->File. В окне создания  выбрать Xml-файл

Откроется Xml-редактор, в котором  можно вводить элементы Xml. Редактор автоматически проверяет ошибки и подставляет закрывающие теги. Созданный файл можно сохранить в нужном месте на диске командой SaveXmlFile.xml As...


 

А также другие работы, которые могут Вас заинтересовать

27893. Правила техники ТБ в аккумуляторном участке 105.5 KB
  Определение допустимого износа. При этом следует иметь в виду что детали с допустимыми износами можно использовать при КР только в том случае если требуемая точность при сборке сопряжений обеспечивается применением методов регулирования или групповой взаимозаменяемости. Для определения величины допустимого износа детали необходимо знать ее предельный износ. Дет достигшую предельного износа восстанавливают или заменяют новой.
27894. Устранение дефектов деталей пластическим деформированием 80.5 KB
  Технология восстановления: подготовка к деформированию деформирование обработка после деформирования 1 Подготовка включ в себя отжиг или высокий отпуск если холодное деформирование; или нагрев детали если горячее деформирование I нагрева не должна вызывать пережога или перегрева Ме 2 Стальные детали с НК.С 2030 или детали цветных Ме сплавов деформируют в холодном состоянии Для всех остальных случаев проводится термообработка перед холодным деформированием или нагрев перед горячим 3 Механическая обработка восстх повей до...
27895. Диагностирование системы питания двигате 42 KB
  Обкатка=приработкаиспытание. Приработка это активный процесс изменения макро и микро геометрии физмех свойств трущихся поверхностей с целью скорейшего достижения оптимальных параметров для последующего восприятия нагрузок. Приработка происходит в 2 этапа: 1приработка стендовая 2 часа; 2приработка в начальный период эксплуатации 3040 часов. Стендовая приработка: вызывается необходимостью подготовки ДВС к восприятию эксплуатационных нагрузок и повышению его долговечности.
27896. Назначение, принципиальное устройство и газового редуктора системы питания двигателя на сжиженном газе 46 KB
  3 Силы действующие на автомобиль и силовой баланс автомобиля. Вторую группу составляют: Mf1 Mf2 моменты сопротивления качению колес автомобиля; Fв сила сопротивления воздуха; Fi сила сопротивления подъему; Fjx сила сопротивления поступательному ускорению масс автомобиля; Fnx продольная составляющая силы сопротивления прицепа. У одиночного автомобиля сила сопротивления прицепа отсутствует. К третьей группе относятся: Rz1 Rz2 нормальные реакции дороги; Ga cos α нормальная составляющая веса автомобиля; Fпz нормальная...
27897. Определение трудоёмкости по видам работ 39 KB
  К постовым относятся работы по ТО и ТР выполняемые непосредственно на а м моечные уборочные смазочные крепёжные диагностические и т. Работы по проверке и ремонту узлов механизмов и агрегатов снятых с автомобиля выполняются на участках агрегатном слесарномеханическом электротехническом и т. Для формирования объёмов работ выполняемых на постах зон ТО ТР и производственных участках а также определения числа рабочих по специальности производится распределение годовых объёмов работ ТО1 ТО2 и ТР по их видам в а затем в...
27898. Основные виды нормативов системы ТО и Р. Корректирование нормативов 37.5 KB
  Регулирование естественных монополий на транспорте Любая естественная монополия на транспорте заинтересована в увеличении цен на предлагаемые услуги формируя тарифы по затратному принципу. Новым качественным подходом к системе управления в области транспорта является создание новой системы государственного регулирования в сфере естественных монополий на транспорте. Для реализации этого нового подхода к управлению и регулированию была создана Федеральная служба России по регулированию естественных монополий на транспорте. К деятельности...
27899. Организация поста по ТО газобаллонной аппаратуры 83.5 KB
  втулки из цветных Ме отверстия в проушинах рулевых сошек рычагов поворотных цапф и тд. Для обжатия втулок из цветх Ме используют приспособление с конусной матрицей в холодном состоянии Проушину сошки нагревют до г=900Т. 3 Причины преждевременного износа и разрушения а м шин.