Lettura e scrittura di schemi XML
È 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".
Lettura e scrittura di schemi XML
La classe XmlSchema fornisce i metodi Read e Write per leggere e scrivere schemi XML. 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.
Il metodo Write scrive schemi XML negli oggetti Stream, TextWriter e XmlWriter e può accettare un oggetto XmlNamespaceManager facoltativo come parametro. Un tipo XmlNamespaceManager viene usato per la gestione degli spazi dei nomi rilevati in uno schema XML. Per altre informazioni sulla classe XmlNamespaceManager, vedere Gestione di spazi dei nomi in un documento XML.
Nell'esempio di codice seguente vengono mostrate la lettura da un file e la scrittura in un file di schemi XML. Il codice di esempio legge il file example.xsd
in un oggetto XmlSchema mediante il metodo static
Read, quindi scrive il file nella console e in un nuovo file new.xsd
. Inoltre, il codice di esempio fornisce un tipo ValidationEventHandler come parametro per il metodo static
Read, per gestire eventuali errori o avvisi di convalida dello schema rilevati durante la generazione di XML Schema. Se il tipo ValidationEventHandler non è specificato (null
), non vengono riportati né avvisi né errori.
#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 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
Nell'esempio il file example.xsd
viene considerato come 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>