System.Xml.Linq.XName – třída

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

Názvy XML zahrnují obor názvů a místní název. Plně kvalifikovaný název je kombinace oboru názvů a místního názvu.

Vytvoření objektu XName

XName neobsahuje žádné veřejné konstruktory. Místo toho tato třída poskytuje implicitní převod zString, který umožňuje vytvořit .XName Nejběžnějším místem použití tohoto převodu je při vytváření elementu nebo atributu: první argument XElement konstruktoru je .XName Předáním řetězce využijete implicitní převod. Následující kód vytvoří prvek s názvem, který není v žádném oboru názvů:

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

V jazyce Visual Basic je vhodnější použít literály XML:

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

Tento příklad vytvoří následující výstup:

<ElementName>content</ElementName>

Přiřazení řetězce k XName použití implicitní převod z String.

Příklad jazyka XElement Visual Basic vytvoří literály XML. I když se používají literály XML, XName vytvoří se pro objekt XElement.

Kromě toho můžete volat metodu Get objektu XName . Doporučeným způsobem je však použití implicitního převodu z řetězce.

Vytvoření XName v oboru názvů

Stejně jako u XML XName může být v oboru názvů nebo může být v žádném oboru názvů.

U jazyka C# se doporučuje vytvořit XName v oboru názvů deklarování XNamespace objektu a pak použít přepsání operátoru sčítání.

Pro Jazyk Visual Basic se doporučuje použít literály XML a globální deklarace oboru názvů k vytvoření XML, který je v oboru názvů.

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

Tento příklad vytvoří následující výstup:

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

Vytvoření XName v žádném oboru názvů

Vlastnost Namespace objektu XName je zaručena, že není null. XName Pokud není v žádném oboru názvů, vlastnost bude nastavena Namespace na None. Následující kód ukazuje toto:

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

Tento příklad vytvoří následující výstup:

The element is in no namespace.

Použití rozbalených názvů

Můžete také vytvořit z rozbaleného XName názvu XML ve formuláři {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)

Tento příklad vytvoří následující výstup:

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

Mějte na paměti, že vytvoření rozšířeného XName názvu je méně efektivní než vytvoření XNamespace objektu a použití přepsání operátoru sčítání. Je také méně efektivní než import globálního oboru názvů a použití literálů XML v jazyce Visual Basic.

Pokud vytvoříte pomocí rozšířeného XName názvu, musí LINQ to XML najít atomizovanou instanci oboru názvů. Tato práce se musí opakovat pro každé použití rozšířeného názvu. Tento dodatečný čas bude pravděpodobně při psaní dotazů LINQ zanedbatelný; Při vytváření velkého stromu XML však může být významné.

Objekty XName jsou atomizované

XName objekty jsou zaručeny atomizovány; to znamená, že pokud dva XName objekty mají přesně stejný obor názvů a přesně stejný místní název, budou sdílet stejnou instanci. Operátory rovnosti a porovnání jsou pro tento účel také explicitně poskytovány.

Kromě dalších výhod tato funkce umožňuje rychlejší spouštění dotazů. Při filtrování názvu prvků nebo atributů se porovnání vyjádřená v predikátech používají porovnání identity, nikoli porovnání hodnot. Mnohem rychlejší je zjistit, že dva odkazy ve skutečnosti odkazují na stejný objekt, než porovnat dva řetězce.