Мы создаем 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
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);
// задайте форматирование с отступом
tw.Formatting=Formatting.Indented;
tw.WriteStartDocument;
//Начать создание элементов и атрибутов
tw.WriteStartElement("book");
tw.WriteAttributeString("genre", "Mystery");
tw.WriteAttributeString("publicationdate", "2001");
tw.WriteAttributeString("ISBN", "123456789");
tw.WriteElementString("title", "Case of the Missing Cookie");
tw.WriteStartElement("author");
tw.WriteElementString("name", "Cookie Monster");
tw.WriteEndElement;
tw.WriteElementString("price", "9.99");
tw.WriteEndElement;
tw.WriteEndDocument;
// очистить
tw.Flush;
tw.Close;
}