Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird gezeigt, wie Sie Dokumente in C# erstellen, die Über Namespaces verfügen.
Beispiel: Deklarieren und Initialisieren eines Standardnamespaces
Um ein Element oder ein Attribut zu erstellen, das sich in einem Namespace befindet, deklarieren und initialisieren Sie zunächst ein XNamespace-Objekt. Anschließend verwenden Sie die Additionsoperatorüberladung, um den Namespace mit dem lokalen Namen in Form einer Zeichenfolge zu kombinieren.
Im folgenden Beispiel wird ein Dokument mit einem Namespace erstellt. Standardmäßig serialisiert LINQ to XML dieses Dokument mit einem Standardnamespace.
// 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);
Dieses Beispiel erzeugt die folgende Ausgabe:
<Root xmlns="http://www.adventure-works.com">
<Child>child content</Child>
</Root>
Beispiel: Erstellen eines Dokuments mit einem Namespace und einem Attribut
Im folgenden Beispiel wird ein Dokument mit einem Namespace erstellt. Außerdem wird ein Attribut erstellt, das den Namespace mit einem Namespacepräfix deklariert. Um ein Attribut zu erstellen, das einen Namespace mit einem Präfix deklariert, erstellen Sie ein Attribut, bei dem der Name des Attributs das Namespacepräfix ist, und dieser Name befindet sich im Xmlns Namespace. Der Wert dieses Attributs ist der URI des Namespace.
// 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);
Dieses Beispiel erzeugt die folgende Ausgabe:
<aw:Root xmlns:aw="http://www.adventure-works.com">
<aw:Child>child content</aw:Child>
</aw:Root>
Beispiel: Erstellen eines Dokuments mit zwei Namespaces, eines mit einem Präfix
Das folgende Beispiel zeigt die Erstellung eines Dokuments, das zwei Namespaces enthält. Einer ist der Standardnamespace, der andere ist ein Namespace mit einem Präfix.
Indem Namespaceattribute in das Stammelement eingeschlossen werden, werden die Namespaces serialisiert, sodass http://www.adventure-works.com
der Standardnamespace ist und www.fourthcoffee.com
mit dem Präfix fc
serialisiert wird. Um ein Attribut zu erstellen, das einen Standardnamespace deklariert, erstellen Sie ein Attribut mit dem Namen xmlns
, ohne einen Namespace. Der Wert des Attributs ist der Standardnamespace-URI.
Befindet sich im Geltungsbereich eine Standardnamespacedeklaration, so gilt sie für untergeordnete XElement
-Objekte. Hierzu wird ihren lokalen Namen das entsprechende XNamespace
-Objekt vorangestellt. Auf der anderen Seite gelten Standardnamespacedeklarationen nicht direkt für Attributnamen. Daher werden XAttribute
-Objekte im Standardnamespace durch nicht definiert, und ihrem lokalen Namen wird das entsprechende XNamespace
-Objekt vorangestellt.
// 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);
Dieses Beispiel erzeugt die folgende Ausgabe:
<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>
Beispiel: Erstellen eines Dokuments mit zwei Namespaces, beide mit Präfixen
Im folgenden Beispiel wird ein Dokument erstellt, das zwei Namespaces enthält, beide mit Namespacepräfixen.
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);
Dieses Beispiel erzeugt die folgende Ausgabe:
<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>
Beispiel: Erstellen eines Namespace mit erweiterten Namen
Eine weitere Möglichkeit zum Erreichen desselben Ergebnisses besteht darin, erweiterte Namen zu verwenden, anstatt ein XNamespace-Objekt zu deklarieren und zu erstellen.
Dieser Ansatz hat Leistungsauswirkungen. Jedes Mal, wenn Sie eine Zeichenfolge übergeben, die einen erweiterten Namen an LINQ to XML enthält, muss LINQ to XML den Namen analysieren, den atomisierten Namespace suchen und den atomisierten Namen finden. Dieser Vorgang benötigt CPU-Zeit. Wenn die Leistung wichtig ist, können Sie ein XNamespace-Objekt explizit deklarieren und verwenden.
Wenn die Leistung ein wichtiges Problem ist, finden Sie unter Pre-Atomization of XName Objects weitere Informationen.
// 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);
Dieses Beispiel erzeugt die folgende Ausgabe:
<aw:Root xmlns:aw="http://www.adventure-works.com">
<aw:Child>child content</aw:Child>
</aw:Root>