Lettura e scrittura di schemi XMLReading and Writing XML Schemas

È possibile usare l'API del modello SOM (Schema Object Model) per scrivere e leggere gli schemi XSD (XML Schema Definition Language) da file o altre origini e compilare schemi XML in memoria usando le classi nello spazio dei nomi System.Xml.Schema associato alle strutture definite nella raccomandazione W3C (World Wide Web Consortium) "XML Schema".The Schema Object Model (SOM) API can be used to read and write XML Schema definition language (XSD) schemas from files or other sources and build XML schemas in-memory using the classes in the System.Xml.Schema namespace that map to the structures defined in the World Wide Web Consortium (W3C) XML Schema Recommendation.

Lettura e scrittura di schemi XMLReading and Writing XML Schemas

La classe XmlSchema fornisce i metodi Read e Write per leggere e scrivere schemi XML.The XmlSchema class provides the Read and Write methods to read and write XML schemas. Il metodo Read restituisce un oggetto XmlSchema che rappresenta lo schema XML e accetta un tipo ValidationEventHandler facoltativo come parametro per gestire i messaggi di avviso e di errore della convalida dello rilevati durante la lettura di uno schema XML.The Read method returns an XmlSchema object representing the XML schema and takes an optional ValidationEventHandler as a parameter to handle schema validation warnings and errors encountered while reading an XML schema.

Il metodo Write scrive schemi XML negli oggetti Stream, TextWriter e XmlWriter e può accettare un oggetto XmlNamespaceManager facoltativo come parametro.The Write method writes XML schemas to Stream, TextWriter and XmlWriter objects and can take an optional XmlNamespaceManager object as a parameter. Un tipo XmlNamespaceManager viene usato per la gestione degli spazi dei nomi rilevati in uno schema XML.An XmlNamespaceManager is used to handle namespaces encountered in an XML schema. Per altre informazioni sulla classe XmlNamespaceManager, vedere Gestione di spazi dei nomi in un documento XML.For more information about the XmlNamespaceManager class, see Managing Namespaces in an XML Document.

Nell'esempio di codice seguente vengono mostrate la lettura da un file e la scrittura in un file di schemi XML.The following code example illustrates reading and writing XML schemas from and to a file. Il codice di esempio legge il file example.xsd in un oggetto XmlSchema mediante il metodo staticRead, quindi scrive il file nella console e in un nuovo file new.xsd.The code example takes the example.xsd file, reads it into an XmlSchema object using the staticRead method, and then writes the file to the console and a new new.xsd file. Inoltre, il codice di esempio fornisce un tipo ValidationEventHandler come parametro per il metodo staticRead, per gestire eventuali errori o avvisi di convalida dello schema rilevati durante la generazione di XML Schema.The code example also provides a ValidationEventHandler as a parameter to the staticRead method to handle any schema validation warnings or errors encountered while reading the XML schema. Se il tipo ValidationEventHandler non è specificato (null), non vengono riportati né avvisi né errori.If the ValidationEventHandler is not specified (null), no warnings or errors are reported.

#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 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);
    }
}
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

Nell'esempio il file example.xsd viene considerato come input.The example takes the example.xsd as input.

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

Vedere ancheSee Also

Panoramica del modello SOM XMLXML Schema Object Model Overview
Compilazione di schemi XMLBuilding XML Schemas
Attraversamento di schemi XMLTraversing XML Schemas
Modifica di schemi XMLEditing XML Schemas
Inclusione o importazione di schemi XMLIncluding or Importing XML Schemas
XmlSchemaSet per la compilazione di schemiXmlSchemaSet for Schema Compilation
Post-Schema-Validation Infoset (PSVI)Post-Schema Compilation Infoset
Gestione di spazi dei nomi in un documento XMLManaging Namespaces in an XML Document