linq到xml - 摆脱空白的xmlns

时间:2009-04-29 18:30:18

标签: c# xml linq

我正在尝试删除xml文件中的空命名空间标记。我见过的所有解决方案都是从头开始创建xml。我有从前面的xml构造的各种xelements。我正在做的就是

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

并且在任何地方添加xmlns =“”。这真是令人生气。谢谢你的帮助。

3 个答案:

答案 0 :(得分:8)

MSDN博客上有一个post,展示了如何(合理地)轻松解决这个问题。在输出XML之前,您需要执行以下代码:

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

正如海报所提到的,替代方案是在添加它时为每个元素名称添加前缀,但这似乎是一个更好的解决方案,因为它更加自动化并节省了一些输入。

答案 1 :(得分:0)

可能就是这样:Empty namespace using Linq Xml

这表示您的文档与您添加的元素位于不同的默认命名空间中。

答案 2 :(得分:0)

我认为这篇文章的第二个答案是:

XElement Add function adds xmlns="" to the XElement

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

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

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