この記事では、この API のリファレンス ドキュメントに補足的な解説を提供します。
このクラスは、名前空間の XML コンストラクトを表します。
すべての XName には XNamespaceが含まれています。 要素が名前空間にない場合でも、要素の XName には名前空間 XNamespace.Noneが含まれます。
XName.Namespaceプロパティは、null
されないことが保証されます。
XNamespace オブジェクトを作成する
XNamespace オブジェクトを作成する最も一般的な方法は、単に文字列を割り当てることです。 その後、加算演算子のオーバーライドを使用して、名前空間とローカル名を組み合わせることができます。 次の例は、このイディオムを示しています。
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root", "Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", "Content")
Console.WriteLine(root)
ただし、Visual Basic では、通常、次のようにグローバルな既定の名前空間を宣言します。
Imports <xmlns='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<Root>Content</Root>
Console.WriteLine(root)
End Sub
End Module
この例では、次の出力が生成されます。
<Root xmlns="http://www.adventure-works.com">Content</Root>
文字列を XNamespace に割り当てると、 Stringからの暗黙的な変換が使用されます。
詳細と例については、「 C# で名前空間を持つドキュメントを作成する方法 (LINQ to XML)」 を参照してください。
Visual Basic での名前空間の 使用の詳細については、「XML 名前空間の操作」を参照してください。
名前空間プレフィックスを制御する
名前空間を宣言する属性を作成すると、属性で指定されたプレフィックスがシリアル化された XML に保持されます。 プレフィックスを持つ名前空間を宣言する属性を作成するには、属性の名前の名前空間が Xmlnsされ、属性の名前が名前空間プレフィックスである属性を作成します。 属性の値は、名前空間の URI です。 次の例は、このイディオムを示しています。
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
"Content");
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
New XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"), _
"Content")
Console.WriteLine(root)
Visual Basic では、名前空間プレフィックスを制御する名前空間ノードを作成する代わりに、通常はグローバル名前空間宣言を使用します。
Imports <xmlns:aw='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<aw:Root>Content</aw:Root>
Console.WriteLine(root)
End Sub
End Module
この例では、次の出力が生成されます。
<aw:Root xmlns:aw="http://www.adventure-works.com">Content</aw:Root>
詳細については、「 名前空間プレフィックスを制御する方法」を参照してください。
既定の名前空間を作成する
名前空間となる属性を構築するときに、属性名の特殊な値が "xmlns" の場合、XML ツリーがシリアル化されるときに、名前空間が既定の名前空間として宣言されます。 "xmlns" 自体の名前を持つ特殊な属性は、どの名前空間にも含まれていません。 属性の値は名前空間 URI です。
次の例では、名前空間が既定の名前空間になるように宣言された属性を含む XML ツリーを作成します。
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute("xmlns", "http://www.adventure-works.com"),
new XElement(aw + "Child", "content")
);
Console.WriteLine(root);
Dim aw As XNamespace = "http://www.adventure-works.com"
Dim root As XElement = New XElement(aw + "Root", _
New XAttribute("xmlns", "http://www.adventure-works.com"), _
New XElement(aw + "Child", "content") _
)
Console.WriteLine(root)
Visual Basic では、既定の名前空間を作成する名前空間ノードを作成する代わりに、通常、グローバルな既定の名前空間宣言を使用します。
Imports <xmlns='http://www.adventure-works.com'>
Module Module1
Sub Main()
Dim root As XElement = _
<Root>
<Child>content</Child>
</Root>
Console.WriteLine(root)
End Sub
End Module
この例では、次の出力が生成されます。
<Root xmlns="http://www.adventure-works.com">
<Child>content</Child>
</Root>
XNamespace のアトマイズ化
XNamespace オブジェクトはアトミック化することが保証されます。つまり、2 つの XNamespace オブジェクトの URI がまったく同じである場合は、同じインスタンスを共有します。 等価演算子と比較演算子は、この目的のために明示的に提供されます。
展開された名前を使用する
名前空間とローカル名を指定するもう 1 つの方法は、 {namespace}name
形式で展開名を使用することです。
XElement e = new XElement("{http://www.adventure-works.com}Root",
new XAttribute("{http://www.adventure-works.com}Att", "content")
);
Console.WriteLine(e);
Dim e As XElement = New XElement("{http://www.adventure-works.com}Root", _
New XAttribute("{http://www.adventure-works.com}Att", "content") _
)
Console.WriteLine(e)
この例では、次の出力が生成されます。
<Root p1:Att="content" xmlns:p1="http://www.adventure-works.com" xmlns="http://www.adventure-works.com" />
このアプローチは、パフォーマンスに影響します。 展開された名前を含む文字列を LINQ to XML に渡すたびに、その名前を解析し、アトミック化された名前空間を見つけて、アトミック化された名前を見つける必要があります。 このプロセスには CPU 時間がかかります。 パフォーマンスが重要な場合は、別の方法を使用できます。
Visual Basic では、拡張名の使用を伴わない XML リテラルを使用することをお勧めします。
.NET