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

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

Жанры

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
:

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

Адвокат

Константинов Андрей Дмитриевич
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Адвокат

Тринадцатый

NikL
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Тринадцатый

Локки 8. Потомок бога

Решетов Евгений Валерьевич
8. Локки
Фантастика:
фэнтези
боевая фантастика
героическая фантастика
попаданцы
5.00
рейтинг книги
Локки 8. Потомок бога

Надуй щеки! Том 7

Вишневский Сергей Викторович
7. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки! Том 7

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Система Возвышения. (цикл 1-8) - Николай Раздоров

Раздоров Николай
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров

Лейб-хирург

Дроздов Анатолий Федорович
2. Зауряд-врач
Фантастика:
альтернативная история
7.34
рейтинг книги
Лейб-хирург

Медиум

Злобин Михаил
1. О чем молчат могилы
Фантастика:
фэнтези
7.90
рейтинг книги
Медиум

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Барон запрещает правила

Ренгач Евгений
9. Закон сильного
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Барон запрещает правила

Законы Рода. Том 2

Андрей Мельник
2. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 2

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Наследие Маозари 8

Панежин Евгений
8. Наследие Маозари
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 8