Vorgehensweise: Ändern des Namespaces für einen gesamten XML-Baum (C#)How to: Change the Namespace for an Entire XML Tree (C#)

Es kann passieren, dass Sie den Namespace für ein Element oder Attribut programmgesteuert ändern müssen.You sometimes have to programmatically change the namespace for an element or an attribute. Mit LINQ to XML ist dies ganz einfach.LINQ to XML makes this easy. Sie können die XElement.Name-Eigenschaft festlegen.The XElement.Name property can be set. Die XAttribute.Name-Eigenschaft kann nicht festgelegt werden, Sie können aber problemlos die Attribute in eine System.Collections.Generic.List<T> kopieren, die vorhandenen Attribute entfernen und dann neue Attribute hinzufügen, die sich im neuen gewünschten Namespace befinden.The XAttribute.Name property cannot be set, but you can easily copy the attributes into a System.Collections.Generic.List<T>, remove the existing attributes, and then add new attributes that are in the new desired namespace.

Weitere Informationen finden Sie unter Working with XML Namespaces (C#) (Arbeiten mit XML-Namespaces (C#)).For more information, see Working with XML Namespaces (C#).

BeispielExample

Der folgende Code erstellt zwei XML-Strukturen, die sich in keinem Namespace befinden.The following code creates two XML trees in no namespace. Er ändert dann den Namespace beider Strukturen und fasst die Strukturen in einer gemeinsamen Struktur zusammen.It then changes the namespace of each of the trees, and combines them into a single tree.

XElement tree1 = new XElement("Data",  
    new XElement("Child", "content",  
        new XAttribute("MyAttr", "content")  
    )  
);  
XElement tree2 = new XElement("Data",  
    new XElement("Child", "content",  
        new XAttribute("MyAttr", "content")  
    )  
);  
XNamespace aw = "http://www.adventure-works.com";  
XNamespace ad = "http://www.adatum.com";  
// change the namespace of every element and attribute in the first tree  
foreach (XElement el in tree1.DescendantsAndSelf())  
{  
    el.Name = aw.GetName(el.Name.LocalName);  
    List<XAttribute> atList = el.Attributes().ToList();  
    el.Attributes().Remove();  
    foreach (XAttribute at in atList)  
        el.Add(new XAttribute(aw.GetName(at.Name.LocalName), at.Value));  
}  
// change the namespace of every element and attribute in the second tree  
foreach (XElement el in tree2.DescendantsAndSelf())  
{  
    el.Name = ad.GetName(el.Name.LocalName);  
    List<XAttribute> atList = el.Attributes().ToList();  
    el.Attributes().Remove();  
    foreach (XAttribute at in atList)  
        el.Add(new XAttribute(ad.GetName(at.Name.LocalName), at.Value));  
}  
// add attribute namespaces so that the tree will be serialized with  
// the aw and ad namespace prefixes  
tree1.Add(  
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com")  
);  
tree2.Add(  
    new XAttribute(XNamespace.Xmlns + "ad", "http://www.adatum.com")  
);  
// create a new composite tree  
XElement root = new XElement("Root",  
    tree1,  
    tree2  
);  
Console.WriteLine(root);  

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

<Root>  
  <aw:Data xmlns:aw="http://www.adventure-works.com">  
    <aw:Child aw:MyAttr="content">content</aw:Child>  
  </aw:Data>  
  <ad:Data xmlns:ad="http://www.adatum.com">  
    <ad:Child ad:MyAttr="content">content</ad:Child>  
  </ad:Data>  
</Root>  

Siehe auchSee Also

Modifying XML Trees (LINQ to XML) (C#) (Ändern von XML-Strukturen (LINQ to XML) (C#))Modifying XML Trees (LINQ to XML) (C#)