Udostępnij za pośrednictwem


Odczytywanie i zapisywanie schematów XML

Interfejs API modelu obiektów schematu (SOM) może służyć do odczytywania i zapisywania schematów języka definicji schematu XML (XSD) z plików lub innych źródeł i tworzenia schematów XML w pamięci przy użyciu klas w System.Xml.Schema przestrzeni nazw mapowanych na struktury zdefiniowane w rekomendacji schematu XML World Wide Web Consortium (W3C).

Odczytywanie i zapisywanie schematów XML

Klasa XmlSchema udostępnia Read metody i Write do odczytywania i zapisywania schematów XML. Metoda Read zwraca XmlSchema obiekt reprezentujący schemat XML i przyjmuje opcjonalny ValidationEventHandler parametr do obsługi ostrzeżeń weryfikacji schematu i błędów napotkanych podczas odczytywania schematu XML.

Metoda Write zapisuje schematy XML w Streamobiektach TextWriter i XmlWriter i może przyjąć opcjonalny XmlNamespaceManager obiekt jako parametr. Element XmlNamespaceManager służy do obsługi przestrzeni nazw napotkanych w schemacie XML. Aby uzyskać więcej informacji na temat XmlNamespaceManager klasy, zobacz Zarządzanie przestrzeniami nazw w dokumencie XML.

Poniższy przykład kodu ilustruje odczytywanie i zapisywanie schematów XML z i do pliku. Przykładowy kod pobiera example.xsd plik, odczytuje go do XmlSchema obiektu przy użyciu staticRead metody , a następnie zapisuje plik w konsoli i nowym new.xsd pliku. Przykładowy kod zawiera ValidationEventHandler również jako parametr staticRead metody do obsługi wszelkich ostrzeżeń weryfikacji schematu lub błędów napotkanych podczas odczytywania schematu XML. ValidationEventHandler Jeśli parametr nie jest określony (null), nie są zgłaszane żadne ostrzeżenia ani błędy.

#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;
};
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 schema = XmlSchema.Read(reader, ValidationCallback);
            schema.Write(Console.Out);
            FileStream file = new FileStream("new.xsd", FileMode.Create, FileAccess.ReadWrite);
            XmlTextWriter xwriter = new XmlTextWriter(file, new UTF8Encoding());
            xwriter.Formatting = Formatting.Indented;
            schema.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);
    }
}
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

Przykład przyjmuje example.xsd jako dane wejściowe.

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

Zobacz też