我正在尝试删除然后将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
有什么想法吗?谢谢!
答案 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的命名空间?