Partager via


Lire et écrire des schémas XML

L’API SOM (Schema Object Model) peut être utilisée pour lire et écrire des schémas XSD (XML Schema Definition Language) à partir de fichiers ou d’autres sources et générer des schémas XML en mémoire à l’aide des classes de l’espace System.Xml.Schema de noms qui correspondent aux structures définies dans la recommandation de schéma XML W3C (World Wide Web Consortium).

Lecture et écriture de schémas XML

La XmlSchema classe fournit les méthodes Read et Write permettant de lire et d’écrire des schémas XML. La Read méthode retourne un XmlSchema objet représentant le schéma XML et prend un paramètre facultatif ValidationEventHandler pour gérer les avertissements et erreurs de validation de schéma rencontrés lors de la lecture d’un schéma XML.

La Write méthode écrit des schémas XML dans Stream, TextWriter et XmlWriter des objets et peut prendre un objet facultatif XmlNamespaceManager en tant que paramètre. Un XmlNamespaceManager est utilisé pour gérer les espaces de noms rencontrés dans un schéma XML. Pour plus d’informations sur la XmlNamespaceManager classe, consultez Gestion des espaces de noms dans un document XML.

L’exemple de code suivant illustre la lecture et l’écriture de schémas XML à partir et dans un fichier. L’exemple de code prend le example.xsd fichier, le lit dans un XmlSchema objet à l’aide de la staticRead méthode, puis écrit le fichier dans la console et un nouveau new.xsd fichier. L'exemple de code fournit également un ValidationEventHandler comme paramètre à la méthode staticRead pour gérer les avertissements ou erreurs de validation de schéma rencontrés lors de la lecture du schéma XML. Si l’argument ValidationEventHandler n’est pas spécifié (null), aucun avertissement ou erreur n’est signalé.

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

L’exemple prend l’entrée 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>

Voir aussi