System.Xml.Linq.XName 類別

本文提供此 API 參考文件的補充備註。

XML 名稱包含命名空間和本機名稱。 完整名稱是命名空間和本機名稱的組合。

建立 XName 物件

XName 不包含任何公用建構函式。 相反地,這個類別會提供的隱含轉換 String ,可讓您建立 XName。 您使用此轉換最常見的位置是在建構項目或屬性時:建構函式的第一個XName自變數XElement是 。 藉由傳遞字串,您可以利用隱含轉換。 下列程式代碼會建立名稱為無命名空間的專案:

XElement root = new XElement("ElementName", "content");
Console.WriteLine(root);

在 Visual Basic 中,更適合使用 XML 常值:

Dim root As XElement = <ElementName>content</ElementName>
Console.WriteLine(root)

這個範例會產生下列輸出:

<ElementName>content</ElementName>

將字串指派給 XName 會使用的隱含轉換。String

Visual Basic 範例會 XElement 使用 XML 常值建立 。 即使使用 XML 常值,也會 XNameXElement建立 物件。

此外,您可以呼叫 GetXName 物件的方法。 不過,建議的方法是使用字串中的隱含轉換。

在命名空間中建立 XName

和 XML 一樣, XName 可以在命名空間中,或者它不能在命名空間中。

針對 C#,在命名空間中建立 XName 的建議方法是宣告 XNamespace 對象,然後使用加號運算子的覆寫。

針對 Visual Basic,建議的方法是使用 XML 常值和全域命名空間宣告來建立命名空間中的 XML。

XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "ElementName", "content");
Console.WriteLine(root);
Imports <xmlns="http://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim root As XElement = <ElementName>content</ElementName>
        Console.WriteLine(root)
    End Sub
End Module

這個範例會產生下列輸出:

<ElementName xmlns="http://www.adventure-works.com">content</ElementName>

在無命名空間中建立 XName

對象的 Namespace 屬性 XName 保證不是 Null。 XName如果不是命名空間,則 Namespace 屬性會設定為 None。 下列程式碼將示範此作業:

XElement root = new XElement("ElementName", "content");
if (root.Name.Namespace == XNamespace.None)
    Console.WriteLine("The element is in no namespace.");
else
    Console.WriteLine("The element is in a namespace.");
Dim root As XElement = <ElementName>content</ElementName>
If (root.Name.Namespace Is XNamespace.None) Then
    Console.WriteLine("The element is in no namespace.")
Else
    Console.WriteLine("The element is in a namespace.")
End If

這個範例會產生下列輸出:

The element is in no namespace.

使用展開的名稱

您也可以使用 格式{namespace}localname,從展開的 XML 名稱建立 XName

XElement root = new XElement("{http://www.adventure-works.com}ElementName", "content");
Console.WriteLine(root);
Dim root As XElement = New XElement("{http://www.adventure-works.com}ElementName", "content")
Console.WriteLine(root)

這個範例會產生下列輸出:

<ElementName xmlns="http://www.adventure-works.com">content</ElementName>

請注意,透過展開名稱建立 XName 會比建立 XNamespace 物件及使用加法運算符的覆寫更有效率。 它也比在 Visual Basic 中匯入全域命名空間和使用 XML 常值的效率低。

如果您使用展開的名稱建立 XName ,LINQ to XML 必須尋找命名空間的原子化實例。 每次使用擴充名稱時,都必須重複這項工作。 撰寫 LINQ 查詢時,這個額外的時間可能會微不足道;不過,建立大型 XML 樹狀結構時可能會相當重要。

XName 物件已原子化

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

除了其他優點外,這項功能也可讓您更快速地執行查詢。 篩選專案或屬性的名稱時,以述詞表示的比較會使用識別比較,而不是值比較。 判斷兩個參考實際上參考相同的物件比比較兩個字元串要快得多。