Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek ukazuje, jak vytvářet dokumenty v jazyce C#, které mají obory názvů.
Příklad: Deklarace a inicializace výchozího oboru názvů
Pokud chcete vytvořit prvek nebo atribut, který je v oboru názvů, nejprve deklarujete a inicializujete objekt XNamespace. Přetížení operátoru sčítání pak použijete k propojení oboru názvů s místním názvem vyjádřeným jako textový řetězec.
Následující příklad vytvoří dokument s jedním oborem názvů. Ve výchozím nastavení LINQ to XML serializuje tento dokument s výchozím oborem názvů.
// Create an XML tree in a namespace.
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);
Tento příklad vytvoří následující výstup:
<Root xmlns="http://www.adventure-works.com">
<Child>child content</Child>
</Root>
Příklad: Vytvoření dokumentu s oborem názvů a atributem
Následující příklad vytvoří dokument s jedním oborem názvů. Vytvoří také atribut, který deklaruje obor názvů pomocí předpony. Chcete-li vytvořit atribut, který deklaruje obor názvů s předponou, vytvoříte atribut, kde název atributu je předpona oboru názvů a tento název je v Xmlns oboru názvů. Hodnota tohoto atributu je URI oboru názvů.
// Create an XML tree in a namespace, with a specified prefix
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);
Tento příklad vytvoří následující výstup:
<aw:Root xmlns:aw="http://www.adventure-works.com">
<aw:Child>child content</aw:Child>
</aw:Root>
Příklad: Vytvoření dokumentu, který má dva obory názvů, jeden s předponou
Následující příklad ukazuje vytvoření dokumentu, který obsahuje dva obory názvů. Jedním z nich je výchozí obor názvů, druhý je obor názvů s předponou.
Zahrnutím atributů oboru názvů do kořenového prvku jsou obory názvů serializovány tak, aby http://www.adventure-works.com je výchozí obor názvů a www.fourthcoffee.com je serializován s předponou fc. Chcete-li vytvořit atribut, který deklaruje výchozí obor názvů, vytvoříte atribut s názvem xmlnsbez oboru názvů. Hodnota atributu je výchozí identifikátor URI oboru názvů.
Pokud je výchozí deklarace oboru názvů v platnosti, aplikuje se na podřízené XElement objekty tím, že před jejich místní názvy přidá odpovídající XNamespace objekt. Na druhé straně se výchozí deklarace oboru názvů nevztahují přímo na názvy atributů. Proto XAttribute objekty ve výchozím oboru názvů jsou definovány nejsou předponou jejich místního názvu s odpovídajícím objektem XNamespace.
// The http://www.adventure-works.com namespace is forced to be the default namespace.
XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
new XAttribute("xmlns", "http://www.adventure-works.com"),
new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
new XElement(fc + "Child",
new XElement(aw + "DifferentChild", "other content")
),
new XElement(aw + "Child2", "c2 content",
new XAttribute("DefaultNs", "default namespace"),
new XAttribute(fc + "PrefixedNs", "prefixed namespace")
),
new XElement(fc + "Child3", "c3 content",
new XAttribute("DefaultNs", "default namespace"),
new XAttribute(fc + "PrefixedNs", "prefixed namespace")
)
);
Console.WriteLine(root);
Tento příklad vytvoří následující výstup:
<Root xmlns="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">
<fc:Child>
<DifferentChild>other content</DifferentChild>
</fc:Child>
<Child2 DefaultNs="default namespace" fc:PrefixedNs="prefixed namespace">c2 content</Child2>
<fc:Child3 DefaultNs="default namespace" fc:PrefixedNs="prefixed namespace">c3 content</fc:Child3>
</Root>
Příklad: Vytvoření dokumentu, který má dva obory názvů, oba s předponami
Následující příklad vytvoří dokument, který obsahuje dva obory názvů, oba s předponami oboru názvů.
XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
new XAttribute(XNamespace.Xmlns + "aw", aw.NamespaceName),
new XAttribute(XNamespace.Xmlns + "fc", fc.NamespaceName),
new XElement(fc + "Child",
new XElement(aw + "DifferentChild", "other content")
),
new XElement(aw + "Child2", "c2 content"),
new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);
Tento příklad vytvoří následující výstup:
<aw:Root xmlns:aw="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">
<fc:Child>
<aw:DifferentChild>other content</aw:DifferentChild>
</fc:Child>
<aw:Child2>c2 content</aw:Child2>
<fc:Child3>c3 content</fc:Child3>
</aw:Root>
Příklad: Vytvoření oboru názvů pomocí rozbalených názvů
Dalším způsobem, jak dosáhnout stejného výsledku, je použít rozšířené názvy místo deklarování a vytvoření XNamespace objektu.
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í LINQ to XML 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ý, můžete chtít deklarovat a používat objekt XNamespace explicitně.
Pokud je výkon důležitým problémem, další informace najdete v tématu Předběžné atomizace objektů XName.
// Create an XML tree in a namespace, with a specified prefix
XElement root = new XElement("{http://www.adventure-works.com}Root",
new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
new XElement("{http://www.adventure-works.com}Child", "child content")
);
Console.WriteLine(root);
Tento příklad vytvoří následující výstup:
<aw:Root xmlns:aw="http://www.adventure-works.com">
<aw:Child>child content</aw:Child>
</aw:Root>