Delen via


XML-schema's lezen en schrijven

De SOM-API (Schema Object Model) kan worden gebruikt voor het lezen en schrijven van XSD-schemaschema's (XML Schema Definition Language) uit bestanden of andere bronnen en het bouwen van XML-schema's in het geheugen met behulp van de klassen in de System.Xml.Schema naamruimte die zijn toegewezen aan de structuren die zijn gedefinieerd in de W3C-schemaaanbeveling (World Wide Web Consortium).

XML-schema's lezen en schrijven

De XmlSchema klasse biedt de en Write methoden voor het Read lezen en schrijven van XML-schema's. De Read methode retourneert een XmlSchema object dat het XML-schema vertegenwoordigt en neemt een optionele ValidationEventHandler als parameter om waarschuwingen en fouten voor schemavalidatie af te handelen die zijn opgetreden tijdens het lezen van een XML-schema.

De Write methode schrijft XML-schema's naar Streamen XmlWriterTextWriter objecten en kan een optioneel XmlNamespaceManager object als parameter gebruiken. Een XmlNamespaceManager wordt gebruikt om naamruimten te verwerken die in een XML-schema zijn aangetroffen. Zie Naamruimten beheren in een XML-document voor meer informatie over de XmlNamespaceManager klasse.

In het volgende codevoorbeeld ziet u het lezen en schrijven van XML-schema's van en naar een bestand. Het codevoorbeeld neemt het example.xsd bestand, leest het in een XmlSchema object met behulp van de staticRead methode en schrijft het bestand vervolgens naar de console en een nieuw new.xsd bestand. Het codevoorbeeld bevat ook een ValidationEventHandler parameter voor de methode voor het staticRead afhandelen van eventuele schemavalidatiewaarschuwingen of fouten die zijn opgetreden tijdens het lezen van het XML-schema. Als het ValidationEventHandler niet is opgegeven (null), worden er geen waarschuwingen of fouten gerapporteerd.

#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

In het voorbeeld wordt de example.xsd invoer gebruikt.

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

Zie ook