时间和内存高效的java XPath解析器

时间:2016-01-13 09:42:20

标签: java xml xpath vtd-xml xom

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

在我当前的项目中,我使用VTD-XML进行了大量的XPath解析,这非常快且内存效率很高,但实际上难以学习,语法错综复杂。

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

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

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

由于VTD-XML的底层建模方法与DOM不同,其API风格也与DOM API有很大不同。因此,如果您习惯使用DOM,则会有一些学习曲线(这是预期的)......

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

答案 1 :(得分:1)

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

在XOM中,您可以在任何节点上使用query()方法从该节点开始搜索作为上下文。 E.g。

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

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

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

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