2

我需要的是 XPath 解析器的 java 实现,它使用起来更直观,并且在内存和时间效率上与VTD-XML相当。更重要的是,我需要它来执行嵌套的 Xpath 表达式以获得额外的性能提升。

在我当前的项目中,我使用 VTD-XML 进行了很多 XPath 解析,这非常快速且内存高效,但非常难以学习并且语法复杂。

我已经看过XOM和 Xalan 解析器了。与 VTD 相比,Xalan 的性能较差。另一方面,XOM 是一个不错的选择,但据我所知,它缺少嵌套 XPath 表达式的功能。嵌套表达式是指从文档中的某个位置而不总是从头开始执行 XPath 搜索的可能性。

感谢您的任何回答。

4

2 回答 2

1

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

由于 VTD-XML 的底层建模方法与 DOM 不同,因此其 API 风格也与 DOM API 截然不同。所以如果你习惯了 DOM,会有一些学习曲线(这是意料之中的)......

如果您以不打算使用的方式使用 VTD-XML,那么您的代码肯定会令人费解且难看。忽略减少/消除对象创建的基本原则,您的应用程序最终会变得迟缓。这个世界上没有任何工具可以帮助你。

于 2016-01-15T00:16:32.443 回答
1

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

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

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

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

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

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

于 2016-01-27T20:20:58.483 回答