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

本文关键字:XElement 获取 命名空间 创建 何避免 新创建 | 更新日期: 2023-09-27 18:33:23

我正在尝试删除,然后将页面页脚从其他文件添加到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

有什么想法吗?谢谢!!

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

你列出的

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

foreach (var d in pagefooter.DescendantsAndSelf())
    d.Name = rep + d.Name.LocalName;
无论何时pageFooter = XElement.Load(file)您都会用

文件的内容替换 pageFooter 中的任何内容。 事先设置rep命名空间不会影响XElement.Load()

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