2009-04-29 109 views
4

我想摆脱我的xml文件中的空名称空间标签。我见过的所有解决方案都是基于从头开始创建xml。我有从以前的XML构造的各种元素。我所做的全部是linq to xml - 摆脱空白的xmlns

XElement InputNodes = XElement.Parse(InputXML); 
m_Command = InputNodes.Element("Command"); 

并且它在每个地方都加入了xmlns =“”。这真的很令人生气。谢谢你的帮助。

回答

0

可能是这样:Empty namespace using Linq Xml

这表明你的文件是不是添加元素的不同的默认命名空间。

+0

这就是问题所在,但我无法以这种方式构建我的xelements,因为我已经从另一个xml文档中获得了其中的一半 – Steve 2009-04-29 18:38:47

+0

您只需确保文档的名称空间和插入的元素匹配。如果他们不这样做,那么每个偏离默认值的元素都会得到它自己的xmlns属性,所以差异会保存在XML文件中。 – Tomalak 2009-04-29 18:41:22

8

MSDN博客上有一个post,显示如何轻松解决此问题(合理)。 outputing的XML之前,你要执行这个代码:

foreach (XElement e in root.DescendantsAndSelf()) 
{ 
    if (e.Name.Namespace == string.Empty) 
    { 
     e.Name = ns + e.Name.LocalName; 
    } 
} 

替代,作为海报提到,是每一个前缀元素名称与您添加它的命名空间,但是这似乎是一个更好的解决方案它更自动化并节省了一些打字的时间。

0

我觉得第二个答案倒在这篇文章:

XElement Add function adds xmlns="" to the XElement

是非常有用的。基本上如果你只是做

XNamespace rootNamespace = doc.Root.Name.NamespaceName; 
XElement referenceElement = new XElement(rootNamespace + "Reference"); 

这应该解决它。所以我猜你必须告诉它在创建元素时不要担心特殊的命名空间。奇。