Lectura y escritura de esquemas XML
La API del Modelo de objetos de esquema (SOM) se puede utilizar para leer y escribir esquemas del lenguaje de definición de esquemas XML (XSD) desde archivos u otros orígenes y compilar esquemas XML en memoria, utilizando las clases del espacio de nombres System.Xml.Schema que se asignan a las estructuras definidas en la recomendación de esquemas XML del W3C (World Wide Web Consortium).
Lectura y escritura de esquemas XML
La clase XmlSchema incluye los métodos Read y Write para leer y escribir esquemas XML. El método Read devuelve un objeto XmlSchema que representa el esquema XML y toma un parámetro ValidationEventHandler opcional para controlar los errores y advertencias de validación que se encuentran al leer un esquema XML.
El método Write escribe esquemas XML para los objetos Stream, TextWriter y XmlWriter y puede tomar un objeto XmlNamespaceManager opcional como parámetro. Se utiliza un XmlNamespaceManager para controlar los espacios de nombres que se encuentran en un esquema XML. Para obtener más información sobre la clase XmlNamespaceManager, vea Administrar espacios de nombres mediante XmlNamespaceManager.
El siguiente código de ejemplo ilustra la lectura y escritura de esquemas XML desde un archivo y en él. El código de ejemplo toma el archivo example.xsd, lo lee en un objeto XmlSchema utilizando el método static Read y, a continuación, escribe el archivo en la consola y en un archivo new.xsd nuevo. El código de ejemplo también proporciona un ValidationEventHandler como parámetro al método static Read para controlar cualquier error o advertencia de validación de esquemas que se encuentre al leer el esquema XML. Si no se especifica el ValidationEventHandler (null), no se notifica ningún error ni advertencia.
Imports System
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
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 myschema = XmlSchema.Read(reader, ValidationCallback);
myschema.Write(Console.Out);
FileStream file = new FileStream("new.xsd", FileMode.Create, FileAccess.ReadWrite);
XmlTextWriter xwriter = new XmlTextWriter(file, new 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);
}
}
#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;
};
En el ejemplo se toma como entrada 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>
Vea también
Conceptos
Información general sobre el Modelo de objetos de esquema XML
Inclusión o importación de esquemas XML
XmlSchemaSet para compilación de esquemas
Conjunto de información posterior a la compilación de esquemas
Administrar espacios de nombres mediante XmlNamespaceManager