如何让JDOM/XPath忽略命名空间?

AdS*_*dSR 5 xml xpath namespaces ignore jdom

我需要处理XML DOM,最好是使用JDOM,我可以在节点上进行XPath搜索.我知道节点名称或路径,但我想完全忽略名称空间,因为有时文档带有名称空间,有时没有,我不能依赖于特定的值.那可能吗?怎么样?

Tom*_*lak 17

/ns:foo/ns:bar/@baz
Run Code Online (Sandbox Code Playgroud)

/*[local-name() = 'foo']/*[local-name() = 'bar']/@baz
Run Code Online (Sandbox Code Playgroud)

你明白了.不要指望它也是闪电般的.


小智 4

我知道这个问题有点老了,但是对于那些稍后查看这个问题的人来说,您可以覆盖一些 JDOM 默认类以有效地使其也忽略名称空间。您可以将自己的 JDOMFactory 实现传递给 SAXBuilder,该 SAXBuilder 会忽略传递到其中的所有命名空间值。

然后重写 SAXBuilder 类并实现 createContentHandler 方法,以便它返回一个带有 startPrefixMapping 方法的空白定义的 SAXHandler。

我还没有在生产环境中使用过它,所以买者自负,但我已经验证它确实适用于我所做的一些快速而肮脏的 XML 东西。