名前空間は、XML ドキュメント内の要素名と属性名を修飾するために使用されます。 名前空間プレフィックスは、要素と属性を名前空間に関連付けます。名前空間は URI 参照に関連付けられます。 名前空間は、XML ドキュメントの中の要素名と属性名を一意にします。
XmlWriter は、現在の名前空間のスコープ内で定義されているすべての名前空間に対応する名前空間スタックを保持します。 要素および属性の書き込み時には、次の方法で名前空間を使用できます。
手動で名前空間を宣言する。
現在の名前空間宣言を新しい名前空間でオーバーライドする。
属性または要素の書き込み時に名前空間プレフィックスを指定する。
手動で名前空間を宣言する。
名前空間宣言は、WriteAttributeString メソッドを使用して手動で書き出すことができます。 これは、名前空間宣言の個数を最適化する方法がわかっているときに役立つ場合があります。 次のコードでは、名前空間宣言がルート要素に作成されます。
writer.WriteStartElement("root")
writer.WriteAttributeString("xmlns", "x", Nothing, "urn:1")
writer.WriteStartElement("item", "urn:1")
writer.WriteEndElement()
writer.WriteStartElement("item", "urn:1")
writer.WriteEndElement()
writer.WriteEndElement()
writer.WriteStartElement("root");
writer.WriteAttributeString("xmlns", "x", null, "urn:1");
writer.WriteStartElement("item", "urn:1");
writer.WriteEndElement();
writer.WriteStartElement("item", "urn:1");
writer.WriteEndElement();
writer.WriteEndElement();
このコードは、次の XML 文字列を生成します。
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</root>
名前空間宣言は、root 要素にあるため、2 つの子要素には複製されません。 item 要素にも、名前空間宣言からのプレフィックスが適用されます。
現在の名前空間のオーバーライド
指定されたプレフィックスに関連付けられている名前空間を手動でオーバーライドすることができます。 次のコードでは、"x" プレフィックスの名前空間 URI が "123" から "abc" に変更されます。
writer.WriteStartElement("x", "root", "123")
writer.WriteStartElement("item")
writer.WriteAttributeString("xmlns", "x", Nothing, "abc")
writer.WriteEndElement()
writer.WriteEndElement()
writer.WriteStartElement("x", "root", "123");
writer.WriteStartElement("item");
writer.WriteAttributeString("xmlns", "x", null, "abc");
writer.WriteEndElement();
writer.WriteEndElement();
このコードは、次の XML 文字列を生成します。
<x:root xmlns:x="123">
<item xmlns:x="abc" />
</x:root>
名前空間プレフィックスの指定
要素または属性の書き込み時に明示的にプレフィックスを指定することによって、使用する名前空間プレフィックスを渡すこともできます。 要素および属性の書き込みに使用するメソッドの多くでは、名前空間プレフィックスを指定できます。 次のコードは、要素の書き込み時にプレフィックスを指定する方法を示しています。
writer.WriteStartElement("x", "root", "urn:1")
writer.WriteStartElement("y", "item", "urn:1")
writer.WriteEndElement()
writer.WriteEndElement()
writer.WriteStartElement("x", "root", "urn:1");
writer.WriteStartElement("y", "item", "urn:1");
writer.WriteEndElement();
writer.WriteEndElement();
このコードは、次の XML 文字列を書き込みます。
<x:root xmlns:x="urn:1">
<y:item xmlns:y="urn:1"/>
</x:root>
XmlWriter は、"x" および "y" の両方のプレフィックスを維持します。
![]() |
---|
すべての XmlWriter 実装 (XmlTextWriter を含む) では、プレフィックスを指定する場合、名前空間を空にできます。この場合、ライターはプレフィックスを無視します。これは、.NET Framework Version 2.0 リリースで変更された動作です。以前のバージョンでは、この条件で XmlException がスローされました。 |