Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

 <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
:

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
после возникновения ошибки продолжает считывание. Имеется возможность определить серьезность ошибки проверки. Если окажется, что это серьезная ошибка, то можно остановить чтение.

Свойство

Schemas
класса
XmlValidationReader
содержит коллекцию
XmlSchemaCollection
, которая находится в пространстве имен
System.Xml.Schema
. В этой коллекции находятся предварительно загруженные схемы XSD и XDR, что позволяет выполнить очень быструю проверку, (особенно, если нужно проверить несколько документов), так как схему не нужно каждый раз перезагружать. Для получения выигрыша в производительности и создается объект
XmlSchemaCollection
. Метод
Add
имеет четыре перегружаемые версии. Можно передать объект на основе
XmlSchema
, объект на основе
XmlSchemaCollection
, строку
string
с пространством имен вместе со строкой
string
с URL файла схемы и, наконец, строку
string
с пространством имен и объектом на основе
XmlReader
, который содержит схему.

Запись XML

Класс

XmlTextWriter
позволяет записывать XML в поток, файл или объект
TextWriter
. Подобно
XmlTextReader
он делает это только вперед, некэшируемым образом.
XmlTextWriter
можно конфигурировать различным образом, что позволяет определить такие вещи, как наличие или отсутствие отступов, величину отступа, какой использовать символ кавычки в значениях атрибутов, и поддерживаются ли пространства имен. Свойство
DataTypeNamespace
определяет, как строго значения типов преобразуются в текст XML. Для этого свойства допустимо значение
urn:schemas-microsoft-com:datatypes
, которое поддерживает типы данных XDR, и другое значение www.w3.org/1999/XMLSchema-data-types, которое является схемой W3C типов данных XSD. Чтобы использовать, например, тип данных
TimeSpan
, необходимо будет задать это свойство для типов данных XSD.

Приведем простой пример, чтобы увидеть, как может использоваться класс

TextWriter
(пример находится в папке
XMLWriterSample1
):

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

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

 string fileName="..\\..\\..\\booknew.xml";

 //создайте XmlTextWriter

 XmlTextWriter tw=new XmlTextWriter(fileName, null);

  • Читать дальше
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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