Compartir a través de


Leer y escribir esquemas XML

La API del modelo de objetos de esquema (SOM) se puede usar para leer y escribir esquemas del lenguaje de definición de esquemas XML (XSD) de archivos u otros orígenes y compilar esquemas XML en memoria mediante las clases del System.Xml.Schema espacio de nombres que se asignan a las estructuras definidas en la Recomendación del esquema XML de World Wide Web Consortium (W3C).

Leer y escribir esquemas XML

La XmlSchema clase proporciona los Read métodos y Write para leer y escribir esquemas XML. El Read método devuelve un XmlSchema objeto que representa el esquema XML y toma un opcional ValidationEventHandler como parámetro para controlar advertencias y errores de validación de esquemas detectados al leer un esquema XML.

El método Write escribe esquemas XML en los objetos Stream, TextWriter y XmlWriter, y puede tomar un objeto opcional XmlNamespaceManager como parámetro. Un XmlNamespaceManager se utiliza para gestionar los espacios de nombres encontrados en un esquema XML. Para obtener más información sobre la XmlNamespaceManager clase , vea Administración de espacios de nombres en un documento XML.

En el ejemplo de código siguiente se muestra cómo leer y escribir esquemas XML desde y en un archivo. El ejemplo de código toma el archivo example.xsd, lo lee en un objeto XmlSchema mediante el método staticRead y, a continuación, escribe el archivo en la consola y en un nuevo archivo new.xsd. El ejemplo de código también proporciona un ValidationEventHandler como parámetro para el staticRead método para controlar las advertencias o errores de validación de esquemas detectados al leer el esquema XML. ValidationEventHandler Si no se especifica (null), no se notifican advertencias ni errores.

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

El ejemplo toma el 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>

Consulte también