System.Xml.Linq.XNamespace 類別

本文提供此 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 Atomization

XNamespace 對象保證會原子化;也就是說,如果兩個 XNamespace 物件具有相同的 URI,它們將會共用相同的實例。 明確提供相等和比較運算符以供此用途使用。

使用展開的名稱

指定命名空間與本機名稱的另一種方式是使用格式 {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 常值,這並不牽涉到使用擴充名稱。