System.Xml.Linq.XName, klasa

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

Nazwy XML obejmują przestrzeń nazw i nazwę lokalną. W pełni kwalifikowana nazwa jest kombinacją przestrzeni nazw i nazwy lokalnej.

Tworzenie obiektu XName

XName nie zawiera żadnych konstruktorów publicznych. Zamiast tego ta klasa udostępnia niejawną konwersję, String która umożliwia utworzenie klasy XName. Najczęstszym miejscem, w którym używasz tej konwersji, jest konstruowanie elementu lub atrybutu: pierwszym argumentem konstruktora XElement jest XName. Przekazując ciąg, możesz skorzystać z niejawnej konwersji. Poniższy kod tworzy element o nazwie, która nie znajduje się w żadnej przestrzeni nazw:

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

W języku Visual Basic bardziej odpowiednie jest użycie literałów XML:

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

Ten przykład generuje następujące wyniki:

<ElementName>content</ElementName>

Przypisywanie ciągu do XName obiektu używa niejawnej konwersji z String.

Przykład języka Visual Basic tworzy XElement literały XML. Mimo że są używane literały XML, XName obiekt jest tworzony dla obiektu XElement.

Ponadto można wywołać metodę GetXName dla obiektu. Zalecanym sposobem jest jednak użycie niejawnej konwersji z ciągu.

Tworzenie nazwy XName w przestrzeni nazw

Podobnie jak w przypadku kodu XML, XName element może znajdować się w przestrzeni nazw lub nie może znajdować się w żadnej przestrzeni nazw.

W przypadku języka C# zalecaną metodą tworzenia obiektu XName w przestrzeni nazw jest zadeklarowanie XNamespace obiektu, a następnie użycie przesłonięcia operatora dodawania.

W przypadku języka Visual Basic zalecane jest użycie literałów XML i globalnych deklaracji przestrzeni nazw w celu utworzenia kodu XML, który znajduje się w przestrzeni nazw.

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

Ten przykład generuje następujące wyniki:

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

Tworzenie nazwy XName bez przestrzeni nazw

Właściwość NamespaceXName obiektu ma gwarancję, że nie ma wartości null. Jeśli właściwość XName nie znajduje się w żadnej przestrzeni nazw, właściwość zostanie ustawiona Namespace na None. Poniższy kod przedstawia następujący kod:

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

Ten przykład generuje następujące wyniki:

The element is in no namespace.

Używanie rozszerzonych nazw

Możesz również utworzyć element XName na podstawie rozwiniętej nazwy XML w formularzu {namespace}localname:

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)

Ten przykład generuje następujące wyniki:

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

Należy pamiętać, że tworzenie obiektu XName za pomocą rozszerzonej nazwy jest mniej wydajne niż tworzenie XNamespace obiektu i używanie przesłonięcia operatora dodawania. Jest to również mniej wydajne niż importowanie globalnej przestrzeni nazw i używanie literałów XML w Visual Basic.

Jeśli tworzysz XName przy użyciu rozwiniętej nazwy, LINQ to XML musi znaleźć atomizowane wystąpienie przestrzeni nazw. Ta praca musi być powtarzana dla każdego użycia rozszerzonej nazwy. Ten dodatkowy czas może być niewielki podczas pisania zapytań LINQ; jednak może to być istotne podczas tworzenia dużego drzewa XML.

Obiekty XName są atomizowane

XName gwarantowane jest atomizację obiektów; oznacza to, że jeśli dwa XName obiekty mają dokładnie taką samą przestrzeń nazw i dokładnie taką samą nazwę lokalną, będą współdzielić to samo wystąpienie. Operatory równości i porównania są również jawnie udostępniane w tym celu.

Między innymi ta funkcja umożliwia szybsze wykonywanie zapytań. Podczas filtrowania według nazwy elementów lub atrybutów porównania wyrażone w predykatach używają porównania tożsamości, a nie porównania wartości. Znacznie szybciej można ustalić, że dwa odwołania rzeczywiście odwołują się do tego samego obiektu niż do porównania dwóch ciągów.