Freigeben über


Lesen und Schreiben von XML-Schemas

Die SOM-API (Schema Object Model) kann zum Lesen und Schreiben von XML-Schemadefinitionsschemas aus Dateien oder anderen Quellen und zum Erstellen von XML-Schemas im Arbeitsspeicher mithilfe der Klassen im System.Xml.Schema Namespace verwendet werden, die den strukturen entsprechen, die in der W3C-XML-Schemaempfehlung (World Wide Web Consortium) definiert sind.

Lesen und Schreiben von XML-Schemas

Die XmlSchema Klasse stellt die Read xml-Schemas zum Lesen und Schreiben von XML-Schemas bereit Write . Die Read Methode gibt ein XmlSchema Objekt zurück, das das XML-Schema darstellt und einen optionalen ValidationEventHandler Parameter zum Behandeln von Schemaüberprüfungswarnungen und Fehlern verwendet, die beim Lesen eines XML-Schemas auftreten.

Die Write Methode schreibt XML-Schemas in StreamTextWriter und Objekte und XmlWriter kann ein optionales XmlNamespaceManager Objekt als Parameter verwenden. Es XmlNamespaceManager wird verwendet, um Namespaces zu behandeln, die in einem XML-Schema aufgetreten sind. Weitere Informationen zur XmlNamespaceManager Klasse finden Sie unter Verwalten von Namespaces in einem XML-Dokument.

Das folgende Codebeispiel veranschaulicht das Lesen und Schreiben von XML-Schemas aus und in eine Datei. Das Codebeispiel verwendet die example.xsd Datei, liest sie mithilfe der XmlSchemastatic Methode in ein Read Objekt und schreibt dann die Datei in die Konsole und eine neue new.xsd Datei. Das Codebeispiel stellt außerdem einen ValidationEventHandler Parameter für die staticRead Methode bereit, um schemavalidierungswarnungen oder Fehler zu behandeln, die beim Lesen des XML-Schemas aufgetreten sind. Wenn dies ValidationEventHandler nicht angegeben ist (null), werden keine Warnungen oder Fehler gemeldet.

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

Im Beispiel wird die example.xsd Eingabe verwendet.

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

Siehe auch