XmlWriter クラス

W3C 勧告『Extensible Markup Language (XML) 1.0』および勧告『Namespaces in XML』に準拠する XML データを格納するストリームまたはファイルを高速に、非キャッシュで、前方向に生成する方法を提供するライタを表します。

この型のすべてのメンバの一覧については、XmlWriter メンバ を参照してください。

System.Object
   System.Xml.XmlWriter
      System.Xml.XmlTextWriter

MustInherit Public Class XmlWriter
[C#]
public abstract class XmlWriter
[C++]
public __gc __abstract class XmlWriter
[JScript]
public abstract class XmlWriter

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

XmlWriter は、 XmlTextWriter クラスで実装されます。

XmlWriter は、現在の要素スタックで定義されたすべての名前空間に対応する名前空間スタックを保持します。 XmlWriter を使用して、手動で名前空間を宣言できます。

w.WriteStartElement("root");
w.WriteAttributeString("xmlns", "x", null, "urn:1");
 w.WriteStartElement("item","urn:1");
 w.WriteEndElement();
 w.WriteStartElement("item","urn:1");
 w.WriteEndElement();
w.WriteEndElement();

上記の C# コードで、次の出力が生成されます。 XmlWriter は、名前空間宣言をルート要素に昇格させ、2 つの子要素で重複しないようにします。子要素は、名前空間宣言からプリフィックスをピック アップします。

<root xmlns:x="urn:1">
 <x:item/>
 <x:item/>
</x:root>

XmlWriter を使用すると、現在の名前空間宣言をオーバーライドできます。名前空間 URI "123" が "abc" でオーバーライドされ、XML 要素 <x:node xmlns:x="abc"/> を作成する例を次に示します。

w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");

プリフィックスを引数として取得する書き込みメソッドを使用して、使用するプリフィックスを指定することもできます。2 つの異なるプリフィックスを同じ名前空間 URI に割り当て、XML テキスト <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root> を作成する例を次に示します。

XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
 w.WriteStartElement("y","item","urn:1");
 w.WriteEndElement();
w.WriteEndElement();
w.Close();

異なるプリフィックスを同じ名前空間 URI に割り当てる複数の名前空間宣言がある場合、 XmlWriter は、名前空間宣言のスタックを逆方向に検索し、最も近い名前空間宣言を選択します。

XmlTextWriter w = new XmlTextWriter(Console.Out);
w.Formatting = Formatting.Indented;
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("attr","urn:1","123");
w.WriteEndElement();
w.WriteEndElement();
w.Close();

上記の C# 例では、 WriteAttributeString 呼び出しでプリフィックスが指定されないため、ライタは名前空間スタックにプッシュされた最後のプリフィックスを使用し、次の XML を生成します。

<x:root xmlns:x="urn:1">
 <y:item y:attr="123" xmlns:y="urn:1" />
</x:root>

名前空間の競合が発生すると、 XmlWriter は、代替プリフィックスを生成して競合を解決します。たとえば、属性と要素のプリフィックスが同じで名前空間が異なる場合、 XmlWriter は、属性の代替プリフィックスを生成します。作成されたプリフィックスには、 n{i} という名前が付けられます。 i は 1 から始まる数字です。この数字は、要素ごとに 1 にリセットされます。

名前空間 URI に関連付けられる属性は、プリフィックスを持つ必要があります (既定の名前空間は属性に適用されません)。これは、W3C 勧告『Namespaces in XML』のセクション 5.2 に準拠します。属性が名前空間 URI を参照していても、プリフィックスを指定していない場合は、ライタが属性のプリフィックスを生成します。

空の要素を書き込むと、タグ名と終了タグの間に <item /> などの空白が追加されます。これにより、以前のバージョンのブラウザとの互換性を保つことができます。

String をメソッド パラメータとして使用すると、 null 参照 (Visual Basic では Nothing) と String.Empty は等しくなります。 String.Empty は、W3C の規則に準拠します。

厳密に型指定されたデータを書き込むには、 XmlConvert クラスを使用してデータ型を文字列に変換します。たとえば、次に示す C# コードは、データを Double から String に変換し、要素 <price>19.95</price> を書き込みます。

Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));

XmlWriter は次のことをチェックしません。

  • 属性名および要素名の無効な文字。
  • 指定したエンコーディングに適合しない Unicode 文字。指定したエンコーディングに Unicode 文字が適合しない場合、 XmlWriter は、その Unicode 文字を文字エンティティにエスケープしません。
  • 重複する属性。
  • DOCTYPE のパブリック ID またはシステム ID の文字。

XML の書き込みに関する詳細については、「 XmlWriter による XML の書き方 」を参照してください。

必要条件

名前空間: System.Xml

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Xml (System.Xml.dll 内)

参照

XmlWriter メンバ | System.Xml 名前空間