2013-01-12 86 views
5

我需要使用Linq將xml文件操作爲xml。將命名空間添加到現有的XDocument

我有一個現有的XDocument我加載

現在我似乎無法能夠將命名空間添加到它。

我做的:

//Load an existing xml into a XDocument 
XDocument xdoc=XDocument.Load(myXml); 

//Create a namespace 
XNamespace myNS="http://www.w3.org/2001/XMLSchema-instance/MyShinyNewNamespace"; 
xAttribute myAttr=new XAttribute(XNamespace.Xmlns +"myNS",myNS); 

    //Add new namepsace to root 

xdoc.Root ???? 

What do you do here? 

如何取回我的命名空間?

如何刪除/替換?

千恩萬謝

回答

14

首先,雖然XML標記允許您使用

<root xmlns="http://example.com/ns"> 
    <foo> 
    <bar>baz</bar> 
    </foo> 
</root> 

使用單一命名空間聲明屬性將根元素以及那些後代元素融入聲明命名空間,當你操縱樹模型時,你需要改變所有元素的Name,所以你需要例如

XNamespace myNs = "http://example.com/ns"; 

foreach (XElement el in xdoc.Descendants()) 
{ 
    el.Name = myNs + el.Name.LocalName; 
} 

如果你也想設置一個特定的前綴pf然後addionally設置

xdoc.Root.Add(new XAttribute(XNamespace.Xmlns + "pf", myNs));