我试图删除,然后将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


有任何想法吗?谢谢!!

最佳答案

列出您的第二笔努力,您处于正确的轨道。 xmlns=""移至下一个后代意味着pageFooter具有正确的xmlns,但其余的后代则没有。用这个:

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

关于c# - 如何避免在新创建的XElement中获取空 namespace ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10452365/

10-10 22:35