Sdílet prostřednictvím


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 konstrukt jmenných prostorů.

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. Pak můžete jmenný prostor zkombinovat s místním názvem pomocí přetížení 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řadit řetězec k XNamespace používá implicitní konverzi 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 .

Správa předpon jmenného prostoru

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, kde je atribut s názvem oboru Xmlns, a název atributu je předpona tohoto 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řte výchozí obor 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 se obor názvů stane výchozím.

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 je zaručeno, že objekty jsou atomizovány; to znamená, že pokud dva XNamespace objekty mají přesně stejný identifikátor URI, budou používat stejnou instanci. Operátory rovnosti a porovnání jsou pro tento účel výslovně určeny.

Použití rozbalených názvů

Dalším způsobem, jak zadat obor názvů a místní název, je použít rozšířený název ve tvaru {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é jméno do LINQ to XML, musí analyzovat jméno, najít atomizovaný jmenný prostor a najít atomizované jméno. 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ů.