Lesen und Schreiben von XML-Schemata
Aktualisiert: November 2007
Mit der SOM-API (Schema Object Model) können XSD-Schemata (XML Schema Definition Language) aus Dateien und anderen Quellen gelesen und geschrieben werden. Außerdem können mithilfe der Klassen im System.Xml.Schema-Namespace speicherintern XML-Schemata erstellt werden, die den Strukturen entsprechen, die in der XML-Schemaempfehlung des W3C (World Wide Web Consortium) festgelegt sind.
Lesen und Schreiben von XML-Schemata
Die XmlSchema-Klasse stellt die Read-Methode und die Write-Methode bereit, mit denen XML-Schemata gelesen bzw. geschrieben werden. Mit der Read-Methode wird ein XmlSchema-Objekt zurückgegeben, das das XML-Schema darstellt, und einen optionalen ValidationEventHandler als Parameter annimmt, um Schemavalidierungswarnungen und Fehler zu behandeln, die beim Lesen eines XML-Schemas auftreten.
Mit der Write-Methode werden XML-Schemata in die Objekte Stream, TextWriter und XmlWriter geschrieben, und ein optionales XmlNamespaceManager-Objekt kann als Parameter angenommen werden. Mit einem XmlNamespaceManager werden in einem XML-Schema gefundene Namespaces behandelt. Weitere Informationen zur XmlNamespaceManager-Klasse finden Sie unter Verwalten von Namespaces mit dem "XmlNamespaceManager".
Im folgenden Codebeispiel werden das Lesen und Schreiben von XML-Schemata in eine bzw. aus einer Datei veranschaulicht. Im Codebeispiel wird die Datei example.xsd verwendet und mithilfe der staticRead-Methode in ein XmlSchema-Objekt eingelesen. Anschließend wird die Datei in die Konsole und eine neue Datei new.xsd geschrieben. Im Codebeispiel wird außerdem ein ValidationEventHandler als Parameter für die staticRead-Methode bereitgestellt, mit dem alle Schemavalidierungswarnungen und Fehler behandelt werden, die beim Lesen des XML-Schemas auftreten. Wenn der ValidationEventHandler nicht angegeben ist (bzw. null ist), werden keine Warnungen oder Fehler ausgegeben.
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;
};
In diesem Beispiel wird example.xsd als Eingabe verwendet.
<?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>
Siehe auch
Konzepte
Übersicht über das XML-Schemaobjektmodell (SOM)
Einfügen oder Importieren von XML-Schemata
"XmlSchemaSet" zur Kompilierung von Schemata