Share via


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

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

Tato třída představuje xml konstruktor oborů názvů.

Každý XName obsahuje .XNamespace I když prvek není v oboru názvů, XName prvek stále obsahuje obor názvů , XNamespace.None. Vlastnost XName.Namespace je zaručena, že nebude null.

Vytvoření objektu XNamespace

Nejběžnější způsob, jak vytvořit XNamespace objekt, je jednoduše přiřadit řetězec k němu. Potom můžete obor názvů zkombinovat s místním názvem pomocí přepsání operátoru sčítání. Následující příklad ukazuje tento idiom:

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)

V jazyce Visual Basic však obvykle deklarujete globální výchozí obor názvů následujícím způsobem:

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

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

<Root xmlns="http://www.adventure-works.com">Content</Root>

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

Další informace a příklady najdete v tématu Vytvoření dokumentu s obory názvů v jazyce C# (LINQ to XML ).

Další informace o používání oborů názvů v jazyce Visual Basic naleznete v tématu Práce s obory názvů XML.

Řízení předpon oboru názvů

Pokud vytvoříte atribut, který deklaruje obor názvů, předpona zadaná v atributu bude zachována v serializovaném XML. Chcete-li vytvořit atribut, který deklaruje obor názvů s předponou, vytvoříte atribut, ve kterém je Xmlnsobor názvů názvu atributu a název atributu je předpona oboru názvů. Hodnota atributu je identifikátor URI oboru názvů. Následující příklad ukazuje tento idiom:

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)

V jazyce Visual Basic místo vytvoření uzlu oboru názvů pro řízení předpon oboru názvů byste obvykle použili globální deklaraci oboru názvů:

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

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

<aw:Root xmlns:aw="http://www.adventure-works.com">Content</aw:Root>

Další informace naleznete v tématu Jak řídit předpony oboru názvů.

Vytvoření výchozího oboru názvů

Při vytváření atributu, který bude obor názvů, pokud má název atributu zvláštní hodnotu "xmlns", pak při serializaci stromu XML bude obor názvů deklarován jako výchozí obor názvů. Speciální atribut se samotným názvem "xmlns" není v žádném oboru názvů. Hodnota atributu je identifikátor URI oboru názvů.

Následující příklad vytvoří strom XML, který obsahuje atribut deklarovaný takovým způsobem, že obor názvů se stane výchozím oborem názvů:

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)

V jazyce Visual Basic místo vytvoření uzlu oboru názvů k vytvoření výchozího oboru názvů byste obvykle použili globální výchozí deklaraci oboru názvů:

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

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

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

Atomizace XNamespace

XNamespace objekty jsou zaručeny atomizovány; to znamená, že pokud dva XNamespace objekty mají přesně stejný identifikátor URI, budou sdílet stejnou instanci. Operátory rovnosti a porovnání jsou pro tento účel explicitně poskytovány.

Použití rozbalených názvů

Dalším způsobem, jak zadat obor názvů a místní název, je použít rozbalený název ve formuláři {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)

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

<Root p1:Att="content" xmlns:p1="http://www.adventure-works.com" xmlns="http://www.adventure-works.com" />

Tento přístup má vliv na výkon. Pokaždé, když předáte řetězec, který obsahuje rozbalený název do LINQ to XML, musí analyzovat název, najít atomizovaný obor názvů a najít atomizovaný název. Tento proces trvá čas procesoru. Pokud je výkon důležitý, možná budete chtít použít jiný přístup.

V jazyce Visual Basic se doporučuje použít literály XML, které nezahrnují použití rozšířených názvů.