2

我正在尝试从另一个文件中删除然后将 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

有任何想法吗?谢谢!!

4

2 回答 2

2

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

foreach (var d in pagefooter.DescendantsAndSelf())
    d.Name = rep + d.Name.LocalName;
于 2012-05-04T16:19:51.140 回答
0

任何时候你pageFooter = XElement.Load(file)都在用文件的内容替换 pageFooter 中的任何内容。预先设置rep命名空间对XElement.Load().

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

于 2012-05-04T16:25:03.867 回答