Чтение онлайн

на главную - закладки

Жанры

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

Ватсон Карли

Шрифт:

Проверка

Если нужно проверить документ XML, используйте класс

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

Значение
свойства
Описание
Auto
Если в
<!DOCTYPE...>
объявлен 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
. Теперь он выглядит так:

<?xml version='1.0'?>

<!-- Этот файл представляет фрагмент базы данных учета запасов книжного склада -->

<bookstore xmlns="x-schema:books.xdr">

 <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">

<title>The Autobiography of Benjamin Franklin</title>

<author>

<first-name>Benjamin</first-name>

<last-name>Franklin</last-name>

</author>

<price>8.99</price>

 </book>

 <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">

<title>The Confidence Man</title>

<author>

<first-name>Herman</first-name>

<last-name>Melville</last-name>

</author>

<price>11.99</price>

 </book>

 <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">

<title>The Gorgias</title>

<author>

<name>Plato</name>

</author>

<price>9.99</price>

 </book>

</bookstore>

Отметим,

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

<?xml version="1.0"?>

<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">

 <ElementType name="first-name" content="textOnly"/>

 <ElementType name="last-name" content="textOnly"/>

 <ElementType name="name" content="textOnly"/>

 <ElementType name="price" content="textOnly" dt:type="fixed.14.4"/>

 <ElementType name="author" content="eltOnly" order="one">

<group order="seq">

<element type="name"/>

</group>

<group order="seq">

<element type="first-name"/>

<element type="last-name"/>

</group>

 </ElementType>

 <ElementType name="title" content="textOnlу" />

 <AttributeType name="genre" dt:type="string"/>

 <ElementType name="book" content="eltOnly">

<attribute type="genre" required="yes"/>

<element type="title"/>

<element type="author"/>

<element type="price"/>

 </ЕlementType>

 <ElementType name="bookstore" content="eltOnly">

<element type="book"/>

 </ElementType>

</Schema>

Отметим, что имеются два атрибута в файле XML, которые не определены в схеме. Если посмотреть внимательно, то можно увидеть что в схеме нет атрибутов

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

Поделиться:
Популярные книги

Идеальный мир для Лекаря 4

Сапфир Олег
4. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 4

Начальник милиции

Дамиров Рафаэль
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции

Матрос империи. Начало

Четвертнов Александр
1. Матрос империи
Фантастика:
героическая фантастика
4.86
рейтинг книги
Матрос империи. Начало

Изгой

Майерс Александр
2. Династия
Фантастика:
фэнтези
попаданцы
рпг
аниме
5.00
рейтинг книги
Изгой

Маленькие Песцовые радости

Видум Инди
5. Под знаком Песца
Фантастика:
альтернативная история
аниме
6.80
рейтинг книги
Маленькие Песцовые радости

Чехов книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Чехов книга 3

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Ложная девятка. Том четвертый

Риддер Аристарх
4. 4-4-2
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ложная девятка. Том четвертый

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Ваше Сиятельство 9

Моури Эрли
9. Ваше Сиятельство
Фантастика:
боевая фантастика
попаданцы
стимпанк
аниме
фэнтези
5.00
рейтинг книги
Ваше Сиятельство 9

Измена. Мой заклятый дракон

Марлин Юлия
Любовные романы:
любовно-фантастические романы
7.50
рейтинг книги
Измена. Мой заклятый дракон

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи

Очкарик

Афанасьев Семён
Фантастика:
фэнтези
5.75
рейтинг книги
Очкарик

Идеальный мир для Лекаря 22

Сапфир Олег
22. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 22