如何避免在新创建的XElement中获取空名称空间?

时间:2012-05-04 16:06:22

标签: c# xml namespaces xelement

我正在尝试删除然后将pageFooter添加到来自不同文件的xml文档中:

XNamespace rep = "http://developer.cognos.com/schemas/report/8.0/";

//remove pageFooter
doc.Root.Descendants().Where(e=>e.Name == rep + "pageFooter").Remove();

//create and load pagefooter from file
XElement pageFooter = XElement.Load(@"C:\pageFooter.xml");

我得到了空命名空间:

<pageFooter xmlns="">
    <contents>
         ..............

我尝试了以下所有方法将命名空间添加到新元素中,没有任何作用:

XElement pagefooter = new XElement(rep+"pageFooter"); 
pageFooter = XElement.Load(@"C:\pageFooter.xml");        
//this has no effect

pageFooter.Name = rep.GetName(pageFooter.Name.LocalName);
//this moves the xmlns="" to the next descendant, <contents>

pageFooter.Add(rep);   
//this has no effect

pageFooter.SetAttributeValue("xmlns", rep);
//this results an empty pageFooter

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

你的第二次努力列在了正确的轨道上。将xmlns=""移动到下一个后代意味着pageFooter具有正确的xmlns,但其余的后代没有。使用此:

foreach (var d in pagefooter.DescendantsAndSelf())
    d.Name = rep + d.Name.LocalName;

答案 1 :(得分:0)

只要您执行pageFooter = XElement.Load(file),就会将pageFooter中的任何内容替换为文件内容。事先设置rep命名空间不会影响XElement.Load()

您确定XML文件是否具有pageFooter的命名空间?