XmlTextWriter クラス
W3C 勧告『Extensible Markup Language (XML) 1.0』および勧告『Namespaces in XML』に準拠する XML データを格納するストリームまたはファイルを高速に、非キャッシュで、前方向に生成する方法を提供するライタを表します。
この型のすべてのメンバの一覧については、XmlTextWriter メンバ を参照してください。
System.Object
System.Xml.XmlWriter
System.Xml.XmlTextWriter
Public Class XmlTextWriter
Inherits XmlWriter
[C#]
public class XmlTextWriter : XmlWriter
[C++]
public __gc class XmlTextWriter : public XmlWriter
[JScript]
public class XmlTextWriter extends XmlWriter
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
このクラスは、 XmlWriter クラスを実装します。
XmlTextWriter は、現在の要素スタックで定義されたすべての名前空間に対応する名前空間スタックを保持します。 XmlTextWriter を使用すると、手動で名前空間を宣言できます。
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# コードで、次の出力が生成されます。 XmlTextWriter は、名前空間宣言をルート要素に昇格させ、2 つの子要素で重複しないようにします。子要素は、名前空間宣言からプリフィックスをピック アップします。
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>
XmlTextWriter を使用すると、現在の名前空間宣言をオーバーライドできます。名前空間 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 に割り当てる複数の名前空間宣言がある場合、 XmlTextWriter は、名前空間宣言のスタックを逆方向に検索し、最も近いものを選択します。
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>
名前空間の競合が発生すると、 XmlTextWriter は、代替プリフィックスを生成して競合を解決します。たとえば、属性と要素のプリフィックスが同じで、名前空間が異なる場合、 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));
XmlTextWriter は次のことをチェックしません。
- 属性名および要素名の無効な文字。
- 指定したエンコーディングに適合しない Unicode 文字。指定したエンコーディングに Unicode 文字が適合しない場合、 XmlTextWriter は、その 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 内)