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>
Visual Basic 範例會 XElement 使用 XML 常值建立 。 即使使用 XML 常值,也會 XName 為 XElement建立 物件。
此外,您可以呼叫 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 物件具有相同的命名空間和完全相同的本機名稱,它們將會共用相同的實例。 也明確提供相等和比較運算符以供此用途使用。
除了其他優點外,這項功能也可讓您更快速地執行查詢。 篩選專案或屬性的名稱時,以述詞表示的比較會使用識別比較,而不是值比較。 判斷兩個參考實際上參考相同的物件比比較兩個字元串要快得多。