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

本文关键字:默认 空间 节点 XmlDocument 提取 | 更新日期: 2023-09-27 18:02:16

我需要按原样从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,然后删除命名空间,我现在试试。

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

我也在为同样的情况而挣扎。下面是我应用的解决方案,其中我从所有名称空间中剥离了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);
           }