C# для профессионалов. Том II - [5]

Шрифт
Интервал

значение атрибута загружается в >listbox.

Проверка

Если нужно проверить документ XML, используйте класс >XmlValidatingReader. Он обладает всей функциональностью класса >XmlTextReader (оба реализуют >XmlReader, но >XmlValidatingReader добавляет свойство >ValidationType, свойство >Schemes и свойство >SchemaType). Свойство >ValidationType задается как тип проверки, которую желательно выполнить. Допустимые значения этого свойства следующие:

Значение свойстваОписание
>AutoЕсли в > объявлен DTD, он и будет загружаться и обрабатываться. Атрибуты по умолчанию и общие сущности, определенные в DTD, станут доступными. Если найден атрибут XSD >schemalocation, то загружается и обрабатывается XSD, при этом все атрибуты по умолчанию, определенные в схеме, будут возвращены. Если найдено пространство имен с префиксом MSXML >x-schema:, загрузится и обработается схема XDR, все атрибуты, определенные по умолчанию, возвратятся.
>DTDПроверка согласно правилам DTD.
>SchemaПроверка согласно правилам XSD.
>XDRПроверка согласно правилам XDR.
>NoneПроверка не выполняется.

Если свойство задано, то должен быть назначен обработчик событий >ValidationEventHandler. Событие инициируется, когда случается ошибка проверки. На ошибку можно отреагировать любым подходящим образом. Рассмотрим пример. Добавим пространство имен схемы XDR (XML Data Reduced — приведенные данные XML) к файлу >books.xml и назовем этот файл >booksVal.xml. Теперь он выглядит так:

>

>

>

>  The Autobiography of Benjamin Franklin

>   Benjamin

>   Franklin

>  

8.99

>  The Confidence Man

>  

>   Herman

>   Melville

>  

11.99

>  The Gorgias

>  

>   Plato

>  

9.99

>

Отметим, что элемент >bookstore имеет теперь атрибут >xmlns="x-schema:books.xdr". Это будет указывать на следующую схему XDR:

>

>

>  

>  

>  

>  

>  

>  

>  

>  

>  

>  

>

Отметим, что имеются два атрибута в файле XML, которые не определены в схеме. Если посмотреть внимательно, то можно увидеть что в схеме нет атрибутов >publication-date и ISBN из элемента >book. Мы сделали это, чтобы показать, что проверка действительно выполняется. Можно использовать для подтверждения этого следующий код. Необходимо будет добавить в класс >using System.Xml.Schema. Весь код доступен в >XMLReaderSample5:

>protected void button1_Click (object sender, System.EventArgs e) {

> //измените это в соответствии с используемой структурой путей доступа.

> string filename = "..\\..\\..\\booksVal.xml";

> XmlTextReader tr = new XmlTextReader(filename);

> XmlValidatingReader trv=new XmlValidatingReader(tr);

> // Задать тип проверки

> trv.ValidationType=ValidationType.xdr;

> // Добавить обработчик события проверки

> trv.ValidationEventHandler += new ValidationEventHandler(this.ValidationEvent);

> // Считываем узел за раз

> while(trv.Read()) {

>  if (trv.NodeType == XmlNodeType.Text) listBox1.Items.Add(trv.Value);

> }

>}


>public void ValidationEvent(object sender, ValidationEventArgs args) {

> MessageBox.Show(args.Message);

>}

Мы создаем >XmlTextReader для передачи в >XmlValidationReader. Когда >XmlValidationReader trv создан, можно использовать его по большей части так же, как >XmlTextReader в предыдущих примерах. Различия состоят в том что в данном случае определен атрибут >ValidationType и добавлен >ValidationEventHandler. Каждый раз при возникновении ошибки проверки инициируется >ValidationEvent. Затем можно будет обработать ошибку проверки любым приемлемым способом. В данном примере выводится >MessageBox с описанием ошибки. Вот как выглядит >MessageBox, когда инициируется >ValdationEvent.

В отличие от некоторых синтаксических анализаторов >XmlValidationReader


Рекомендуем почитать
Графика для Windows средствами DirectDraw

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Виртуальная библиотека Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Пишем драйвер Windows на ассемблере

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Как писать драйвера

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Информационная технология. Оценка программной продукции характеристики качества и руководства по их применению

Стандарт подготовлен на основе применения аутентичного текста международного стандарта ИСО/МЭК 9126-91 «Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению»Information technology. Software product evaluation. Quality characteristics and guidelines for their use.