Partilhar via


Ler e gravar esquemas XML

A API SOM (Schema Object Model) pode ser usada para ler e escrever esquemas XSD (XML Schema Definition Language) de arquivos ou outras fontes e criar esquemas XML na memória usando as classes no System.Xml.Schema namespace que mapeiam para as estruturas definidas na Recomendação de Esquema XML do World Wide Web Consortium (W3C).

Leitura e gravação de esquemas XML

A XmlSchema classe fornece os Read métodos e Write para ler e gravar esquemas XML. O Read método retorna um XmlSchema objeto que representa o esquema XML e usa um opcional ValidationEventHandler como parâmetro para manipular avisos de validação de esquema e erros encontrados durante a leitura de um esquema XML.

O Write método grava esquemas XML em Stream, TextWriter e XmlWriter objetos e pode tomar um objeto opcional XmlNamespaceManager como um parâmetro. Um XmlNamespaceManager é usado para manipular namespaces encontrados em um esquema XML. Para obter mais informações sobre a XmlNamespaceManager classe, consulte Gerenciando namespaces em um documento XML.

O exemplo de código a seguir ilustra a leitura e gravação de esquemas XML de e para um arquivo. O exemplo de código usa o arquivo example.xsd, lê-o em um objeto XmlSchema utilizando o método staticRead, e então exibe o arquivo no console e cria um novo arquivo new.xsd. O exemplo de código também fornece um ValidationEventHandler como parâmetro para o método staticRead para lidar com quaisquer avisos de validação de esquema ou erros encontrados durante a leitura do esquema XML. Se o ValidationEventHandler não for especificado (null), nenhum aviso ou erro será relatado.

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

O exemplo toma o example.xsd como entrada.

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

Ver também