时间和内存效率 java XPath 解析器

Time and memory efficient java XPath parser

我需要的是 java XPath 解析器的实现,它使用起来更直观,并且在内存和时间效率方面已经可以与 VTD-XML. What is more, I need it to perform nested Xpath expressions for some additional performance gains.

In my current project I do a lot of XPath parsing with VTD-XML which is really fast and memory efficient, but really difficult to learn and with convoluted syntax.

I looked at XOM 和 Xalan 解析器相媲美。与 VTD 相比,Xalan 的性能较差。另一方面,XOM 是一个很好的工具,但据我所知,它缺少嵌套 XPath 表达式的功能。嵌套表达式是指从文档中的某个位置执行 XPath 搜索的可能性,而不是总是从头开始。

感谢您的回答。

我认为您不会轻易找到 VTD-XML 的替代品以实现快速 XPath 和内存节省。根本原因是每个小对象分配(想想元素节点、字符串、属性等)都会产生一点内存开销,并且这些开销往往会在 DOM 树的构造过程中累积,从而导致显着的内存开销正如在基于对象的 XML 建模 API 中所观察到的,例如 DOM.

由于 VTD-XML 的基础建模方法与 DOM 不同,其 API 的风格也与 DOM API 大不相同。所以如果你习惯了DOM,会有一些学习曲线(这是预料之中的)...

如果您以不该使用的方式使用 VTD-XML,您的代码肯定会令人费解且丑陋。忽略 reducing/eliminating 对象创建的基本原理,您的应用程序最终会变得迟钝。这个世界上没有任何工具可以帮助你。

使用 XPath 搜索时,您从上下文节点开始。 XPath 是相对于该上下文节点的。这不一定是文档的根目录。

特别是在 XOM 中,您可以在任何节点上使用 query() 方法从该节点作为上下文开始进行搜索。例如

Nodes result = p.query("b");

将找到名为 b 的元素,它们是 p 节点的子节点。

Nodes result = p.query(".//b");

将找到名为 b 的元素,它们是 p 节点的后代。