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
. Теперь он выглядит так:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
Отметим, что элемент >bookstore
имеет теперь атрибут >xmlns="x-schema:books.xdr"
. Это будет указывать на следующую схему XDR:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> ЕlementType>
>
>
>
>
Отметим, что имеются два атрибута в файле 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](/storage/book-covers/6d/6dbc78361f37e9af5b71d5019ca64570a40e0466.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Виртуальная библиотека Delphi](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Пишем драйвер Windows на ассемблере](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Как писать драйвера](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![MFC и OpenGL](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Информационная технология. Оценка программной продукции характеристики качества и руководства по их применению](/build/oblozhka.dc6e36b8.jpg)
Стандарт подготовлен на основе применения аутентичного текста международного стандарта ИСО/МЭК 9126-91 «Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению»Information technology. Software product evaluation. Quality characteristics and guidelines for their use.