在XPath中寻址元素的最有效方法是什么?

时间:2015-05-04 15:26:27

标签: java xml xpath axiom

我有一个关注效率的Java程序。在那里我使用XPaths。

在XPath中,我可以选择从root开始的元素

/root/a/b/c/d/e

或使用descendent-or-self轴:

//e

这两者中最有效的方法是什么?

3 个答案:

答案 0 :(得分:3)

直接路径往往比使用更一般的后代或自我(//)轴的路径更好,但是:

  • 实现可以变化(但一般来说,直接路径的效果会更好)。
  • 差异可能很小,不重要,尤其是 小文件。
  • 与所有性能问题一样,在优化之前进行衡量,以避免在真正的瓶颈以外的领域花费精力。

答案 1 :(得分:1)

我认为/ root / a / b / c / d / e会更有效率,因为在第一种情况下,XPath处理器可以消除很多分支,而在第二种情况下(// e) XPath处理器必须搜索整个文档树。

您应该编写一个小型Java程序,该程序可以使用两种不同的方法,然后查看运行1000次循环所需的时间。

答案 2 :(得分:1)

了解领先的///结构非常重要。

前导/启动始终与根节点相关的路径。因此,即使我们正在搜索子节点,XPath:

root/a/b/c

...仍将返回XML文档中的每个c节点,即使它们不是第一个c节点的后代。同样,XPath:

//e/

...仍会返回XML文档中的每个e节点,而不仅仅是第一个c节点的后代。