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. Для этого свойства допустимо значение