Odczytywanie i zapisywanie schematów XML
Interfejs API modelu obiektów schematu (SOM) może służyć do odczytywania i zapisywania schematów języka definicji schematu XML (XSD) z plików lub innych źródeł i tworzenia schematów XML w pamięci przy użyciu klas w System.Xml.Schema przestrzeni nazw mapowanych na struktury zdefiniowane w rekomendacji schematu XML World Wide Web Consortium (W3C).
Odczytywanie i zapisywanie schematów XML
Klasa XmlSchema udostępnia Read metody i Write do odczytywania i zapisywania schematów XML. Metoda Read zwraca XmlSchema obiekt reprezentujący schemat XML i przyjmuje opcjonalny ValidationEventHandler parametr do obsługi ostrzeżeń weryfikacji schematu i błędów napotkanych podczas odczytywania schematu XML.
Metoda Write zapisuje schematy XML w Streamobiektach TextWriter i XmlWriter i może przyjąć opcjonalny XmlNamespaceManager obiekt jako parametr. Element XmlNamespaceManager służy do obsługi przestrzeni nazw napotkanych w schemacie XML. Aby uzyskać więcej informacji na temat XmlNamespaceManager klasy, zobacz Zarządzanie przestrzeniami nazw w dokumencie XML.
Poniższy przykład kodu ilustruje odczytywanie i zapisywanie schematów XML z i do pliku. Przykładowy kod pobiera example.xsd
plik, odczytuje go do XmlSchema obiektu przy użyciu static
Read metody , a następnie zapisuje plik w konsoli i nowym new.xsd
pliku. Przykładowy kod zawiera ValidationEventHandler również jako parametr static
Read metody do obsługi wszelkich ostrzeżeń weryfikacji schematu lub błędów napotkanych podczas odczytywania schematu XML. ValidationEventHandler Jeśli parametr nie jest określony (null
), nie są zgłaszane żadne ostrzeżenia ani błędy.
#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
Przykład przyjmuje example.xsd
jako dane wejściowe.
<?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>
Zobacz też
- Model SOM (XML Schema Object Model) ― omówienie
- Tworzenie schematów XML
- Przechodzenie schematów XML
- Edytowanie schematów XML
- Uwzględnianie lub importowanie schematów XML
- Klasa XmlSchemaSet na potrzeby kompilacji schematu
- Zestaw informacji po kompilacji schematu
- Zarządzanie przestrzeniami nazw w dokumencie XML