XML-schema's lezen en schrijven
De SOM-API (Schema Object Model) kan worden gebruikt voor het lezen en schrijven van XSD-schemaschema's (XML Schema Definition Language) uit bestanden of andere bronnen en het bouwen van XML-schema's in het geheugen met behulp van de klassen in de System.Xml.Schema naamruimte die zijn toegewezen aan de structuren die zijn gedefinieerd in de W3C-schemaaanbeveling (World Wide Web Consortium).
XML-schema's lezen en schrijven
De XmlSchema klasse biedt de en Write methoden voor het Read lezen en schrijven van XML-schema's. De Read methode retourneert een XmlSchema object dat het XML-schema vertegenwoordigt en neemt een optionele ValidationEventHandler als parameter om waarschuwingen en fouten voor schemavalidatie af te handelen die zijn opgetreden tijdens het lezen van een XML-schema.
De Write methode schrijft XML-schema's naar Streamen XmlWriterTextWriter objecten en kan een optioneel XmlNamespaceManager object als parameter gebruiken. Een XmlNamespaceManager wordt gebruikt om naamruimten te verwerken die in een XML-schema zijn aangetroffen. Zie Naamruimten beheren in een XML-document voor meer informatie over de XmlNamespaceManager klasse.
In het volgende codevoorbeeld ziet u het lezen en schrijven van XML-schema's van en naar een bestand. Het codevoorbeeld neemt het example.xsd
bestand, leest het in een XmlSchema object met behulp van de static
Read methode en schrijft het bestand vervolgens naar de console en een nieuw new.xsd
bestand. Het codevoorbeeld bevat ook een ValidationEventHandler parameter voor de methode voor het static
Read afhandelen van eventuele schemavalidatiewaarschuwingen of fouten die zijn opgetreden tijdens het lezen van het XML-schema. Als het ValidationEventHandler niet is opgegeven (null
), worden er geen waarschuwingen of fouten gerapporteerd.
#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
In het voorbeeld wordt de example.xsd
invoer gebruikt.
<?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>