次の方法で共有


XML スキーマの読み取りと書き込み

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 スキーマをStreamTextWriter、および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>

こちらも参照ください