Schema Object Model (SOM) API を使用すると、ファイルやその他のソースから XML スキーマ定義言語 (XSD) スキーマを読み書きし、world Wide Web Consortium (W3C) XML スキーマの推奨事項で定義されている構造にマップする System.Xml.Schema 名前空間のクラスを使用して XML スキーマをメモリ内に構築できます。
XML スキーマの読み取りと書き込み
XmlSchema クラスは、XML スキーマの読み取りと書き込みを行うReadメソッドとWrite メソッドを提供します。 Read メソッドは、XML スキーマを表すXmlSchema オブジェクトを返し、省略可能なValidationEventHandlerをパラメーターとして受け取り、XML スキーマの読み取り中に発生したスキーマ検証の警告とエラーを処理します。
Write メソッドは、XML スキーマをStream、TextWriter、およびXmlWriterオブジェクトに書き込み、省略可能なXmlNamespaceManager オブジェクトをパラメーターとして受け取ることができます。 XmlNamespaceManagerは、XML スキーマで検出された名前空間を処理するために使用されます。 XmlNamespaceManager クラスの詳細については、「XML ドキュメントでの名前空間の管理」を参照してください。
次のコード例は、ファイルとの間での XML スキーマの読み取りと書き込みを示しています。 このコード例では、example.xsd
ファイルを取得し、XmlSchemastatic
メソッドを使用してRead オブジェクトに読み取り、そのファイルをコンソールと新しいnew.xsd
ファイルに書き込みます。 また、このコード例では、xml スキーマの読み取り中に発生したスキーマ検証の警告またはエラーを処理するValidationEventHandlerstatic
メソッドのパラメーターとしてReadを提供します。
ValidationEventHandlerが指定されていない場合 (null
)、警告やエラーは報告されません。
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
この例では、 example.xsd
を入力として受け取ります。
<?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>
こちらも参照ください
.NET