C# для профессионалов. Том II | страница 11
> 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. Для этого свойства допустимо значение