Чтение и запись XML-схем
Обновлен: November 2007
API модели SOM можно использовать для чтения и записи схем на языке XSD из файлов или других источников, а также строить схемы XML в памяти с помощью классов в пространстве имен System.Xml.Schema, которые сопоставляются со структурами, определенными в рекомендациях W3C по схемам XML.
Чтение и запись XML-схем
Класс XmlSchema предоставляет методы Read и Write для чтения и записи схем XML. Метод Read возвращает объект XmlSchema, представляющий схему XML, и принимает необязательный объект ValidationEventHandler в качестве параметра для обработки предупреждений и ошибок проверки схемы, обнаруженных при чтении схемы XML.
Метод Write записывает схемы XML в объекты Stream, TextWriter и XmlWriter и может принимать в качестве параметра необязательный объект XmlNamespaceManager. Объект XmlNamespaceManager используется, чтобы обрабатывать пространства имен, обнаруженные в схеме XML. Дополнительные сведения о классе XmlNamespaceManager см. в разделе Управление пространствами имен с помощью XmlNamespaceManager.
Следующий пример кода иллюстрирует чтение из файла и запись в файл схем XML. Пример кода берет файл example.xsd, считывает его в объект XmlSchema с помощью метода staticRead, а затем записывает файл в консоль и новый файл new.xsd. Кроме того, в этом примере кода методу staticRead в качестве параметра передается объект ValidationEventHandler для обработки любых предупреждений и ошибок проверки схемы, обнаруженных при чтении схемы XML. Если объект ValidationEventHandler не указан (значение null), об ошибках или предупреждениях сообщаться не будет.
Imports System
Imports System.IO
Imports System.Text
Imports System.Xml
Imports System.Xml.Schema
Class XmlSchemaReadWriteExample
Shared Sub Main()
Try
Dim reader As XmlTextReader = New XmlTextReader("example.xsd")
Dim myschema As XmlSchema = XmlSchema.Read(reader, AddressOf ValidationCallback)
myschema.Write(Console.Out)
Dim file As FileStream = New FileStream("new.xsd", FileMode.Create, FileAccess.ReadWrite)
Dim xwriter As XmlTextWriter = New XmlTextWriter(file, New UTF8Encoding())
xwriter.Formatting = Formatting.Indented
myschema.Write(xwriter)
Catch e As Exception
Console.WriteLine(e)
End Try
End Sub
Shared Sub ValidationCallback(ByVal sender As Object, ByVal args As ValidationEventArgs)
If args.Severity = XmlSeverityType.Warning Then
Console.Write("WARNING: ")
Else
If args.Severity = XmlSeverityType.Error Then
Console.Write("ERROR: ")
End If
End If
Console.WriteLine(args.Message)
End Sub
End Class
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Schema;
class XmlSchemaReadWriteExample
{
static void Main()
{
try
{
XmlTextReader reader = new XmlTextReader("example.xsd");
XmlSchema myschema = XmlSchema.Read(reader, ValidationCallback);
myschema.Write(Console.Out);
FileStream file = new FileStream("new.xsd", FileMode.Create, FileAccess.ReadWrite);
XmlTextWriter xwriter = new XmlTextWriter(file, new UTF8Encoding());
xwriter.Formatting = Formatting.Indented;
myschema.Write(xwriter);
}
catch(Exception e)
{
Console.WriteLine(e);
}
}
static void ValidationCallback(object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Warning)
Console.Write("WARNING: ");
else if (args.Severity == XmlSeverityType.Error)
Console.Write("ERROR: ");
Console.WriteLine(args.Message);
}
}
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Text;
using namespace System::Xml;
using namespace System::Xml::Schema;
ref class XmlSchemaReadWriteExample
{
public:
static void Main()
{
try
{
XmlTextReader^ reader = gcnew XmlTextReader("example.xsd");
ValidationEventHandler^ eventHandler = gcnew ValidationEventHandler(ValidationCallback);
XmlSchema^ myschema = XmlSchema::Read(reader, eventHandler);
myschema->Write(Console::Out);
FileStream^ file = gcnew FileStream("new.xsd", FileMode::Create, FileAccess::ReadWrite);
XmlTextWriter^ xwriter = gcnew XmlTextWriter(file, gcnew UTF8Encoding());
xwriter->Formatting = Formatting::Indented;
myschema->Write(xwriter);
}
catch(Exception^ e)
{
Console::WriteLine(e);
}
}
static void ValidationCallback(Object^ sender, ValidationEventArgs^ args)
{
if (args->Severity == XmlSeverityType::Warning)
Console::Write("WARNING: ");
else if (args->Severity == XmlSeverityType::Error)
Console::Write("ERROR: ");
Console::WriteLine(args->Message);
}
};
int main()
{
XmlSchemaReadWriteExample::Main();
return 0;
};
В примере в качестве входных данных используется файл example.xsd.
<?xml version="1.0"?>
<xs:schema id="play" targetNamespace="http://tempuri.org/play.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/play.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name='myShoeSize'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:decimal'>
<xs:attribute name='sizing' type='xs:string' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
См. также
Основные понятия
Общие сведения об модели объектов XML-схемы
XmlSchemaSet для компиляции схемы
Набор сведений для постсхемной компиляции
Управление пространствами имен с помощью XmlNamespaceManager