Gewusst wie: Erstellen eines Dokuments mit Namespaces (C#) (LINQ to XML)How to: Create a Document with Namespaces (C#) (LINQ to XML)

In diesem Thema wird das Erstellen von Dokumenten mit Namespaces beschrieben.This topic shows how to create documents with namespaces.

BeispielExample

Wenn Sie ein Element oder Attribut erstellen möchten, das sich in einem Namespace befindet, deklarieren und initialisieren Sie zuerst ein XNamespace-Objekt.To create an element or an attribute that is in a namespace, you first declare and initialize an XNamespace object. Anschließend verwenden Sie die Additionsoperatorüberladung, um den Namespace mit dem lokalen Namen in Form einer Zeichenfolge zu kombinieren.You then use the addition operator overload to combine the namespace with the local name, expressed as a string.

Das folgende Beispiel erstellt ein Dokument mit nur einem Namespace.The following example creates a document with one namespace. Standardmäßig serialisiert LINQ to XML dieses Dokument mit einem Standardnamespace.By default, LINQ to XML serializes this document with a default namespace.

// 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:This example produces the following output:

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

BeispielExample

Das folgende Beispiel erstellt ein Dokument mit nur einem Namespace.The following example creates a document with one namespace. Es erstellt auch ein Attribut, das den Namespace mit einem Namespacepräfix deklariert.It also creates an attribute that declares the namespace with a namespace prefix. Gehen Sie zum Erstellen eines Attributs, das einen Namespace mit einem Präfix deklariert, wie folgt vor. Erstellen Sie ein Attribut, bei dem der Name des Attributs das Namespacepräfix darstellt. Dieser Name befindet sich im Xmlns-Namespace.To create an attribute that declares a namespace with a prefix, you create an attribute where the name of the attribute is the namespace prefix, and this name is in the Xmlns namespace. Der Wert dieses Attributs ist der URI des Namespace.The value of this attribute is the URI of the 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:This example produces the following output:

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

BeispielExample

Das folgende Beispiel zeigt das Erstellen eines Dokuments, das zwei Namespaces enthält.The following example shows the creation of a document that contains two namespaces. Einer der Namespaces ist der Standardnamespace.One is the default namespace. Der andere Namespace besitzt ein Präfix.Another is a namespace with a prefix.

Durch das Aufnehmen von Namespaceattributen in das Stammelement werden die Namespaces so serialisiert, dass "http://www.adventure-works.com" zum Standardnamespace wird und "www.fourthcoffee.com" mit dem Präfix "fc" serialisiert wird.By including namespace attributes in the root element, the namespaces are serialized so that http://www.adventure-works.com is the default namespace, and www.fourthcoffee.com is serialized with a prefix of "fc". Zum Erstellen eines Attributs, das einen Standardnamespace deklariert, erstellen Sie ein Attribut mit dem Namen xmlns ohne einen Namespace.To create an attribute that declares a default namespace, you create an attribute with the name "xmlns", without a namespace. Der Wert des Attributs ist der Standardnamespace-URI.The value of the attribute is the default namespace URI.

// 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 XElement(fc + "Child3", "c3 content")  
);  
Console.WriteLine(root);  

Dieses Beispiel erzeugt die folgende Ausgabe:This example produces the following output:

<Root xmlns="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">  
  <fc:Child>  
    <DifferentChild>other content</DifferentChild>  
  </fc:Child>  
  <Child2>c2 content</Child2>  
  <fc:Child3>c3 content</fc:Child3>  
</Root>  

BeispielExample

Das folgende Beispiel erstellt ein Dokument, das zwei Namespaces enthält, die beide ein Namespacepräfix besitzen.The following example creates a document that contains two namespaces, both with namespace prefixes.

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:This example produces the following output:

<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>  

BeispielExample

Dasselbe Ergebnis lässt sich erzielen, indem statt des Deklarierens und Erstellens eines XNamespace-Objekts erweiterte Namen verwendet werden.Another way to accomplish the same result is to use expanded names instead of declaring and creating an XNamespace object.

Dieser Ansatz wirkt sich aber negativ auf die Leistung aus.This approach has performance implications. Jedes Mal, wenn Sie eine Zeichenfolge, die einen erweiterten Namen enthält, an LINQ to XML übergeben, muss LINQ to XML den Namen analysieren und nach dem atomisierten Namespace und dem atomisierten Namen suchen.Each time you pass a string that contains an expanded name to LINQ to XML, LINQ to XML must parse the name, find the atomized namespace, and find the atomized name. Dieser Prozess nimmt CPU-Zeit in Anspruch.This process takes CPU time. Wenn es auf eine hohe Leistung ankommt, sollten Sie daher explizit ein XNamespace-Objekt deklarieren und verwenden.If performance is important, you might want to declare and use an XNamespace object explicitly.

Wenn die Leistung ein wichtiger Aspekt ist, finden Sie weitere Informationen unter Pre-Atomization of XName Objects (LINQ to XML) (C#) (Voratomisierung von XName-Objekten (LINQ to XML) (C#)).If performance is an important issue, see Pre-Atomization of XName Objects (LINQ to XML) (C#) for more information

// 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:This example produces the following output:

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

Siehe auchSee Also

Working with XML Namespaces (C#) (Arbeiten mit XML-Namespaces (C#))Working with XML Namespaces (C#)