如何从XmlDocument中提取节点而忽略默认命名空间

时间:2014-05-08 13:31:17

标签: c# xml-namespaces xmldocument

我需要按照它的方式从XmlDocument中提取节点的xml,如果它最初不存在则没有命名空间属性。 这是XML文件:

<app xmlns="http://java.sun.com/xml/ns/j2ee" ...>
  <item/>
</app>

这是我为了获得一个节点而做的事情:

var document = new new XmlDocument();
document.PreserveWhitespace = true;
document.LoadXml(sourceRootText);
...
var node = GetNode(document);
var text = node.OuterXml;

它返回以下结果:

text = "<item xmlns='http://java.sun.com/xml/ns/j2ee' />";

有没有办法告诉文档在节点中不包含命名空间? 我明白为什么要添加它,但我想保留它没有命名空间。

另外,我不能不幸地使用XDocument,因为很多代码已经使用了XmlDocument,现在我不容易重做它。

编辑:其实我可以尝试XDocument解析XmlNode.OuterXml然后删除命名空间,我现在就试试。

1 个答案:

答案 0 :(得分:0)

我在同样的情况下挣扎。以下是我应用的解决方案,我从所有命名空间中删除了xml。可能这会帮助你

XElement xdoc = stripNS(XElement.Parse(node.NextSibling.OuterXml, LoadOptions.PreserveWhitespace));
                       XmlDocument xmlDoc = new XmlDocument();
                       using (XmlReader xmlReader = xdoc.CreateReader())
                       {
                           xmlDoc.Load(xmlReader);
                       }

static XElement stripNS(XElement root)
           {
               return new XElement(root.Name.LocalName, root.HasElements ? root.Elements().Select(el => stripNS(el)) : (object)root.Value);
           }