1

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

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

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

或使用descendent-or-self轴:

//e

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

4

3 回答 3

3

直接路径往往比使用更通用的后裔或自我 ( //) 轴的路径执行得更好,但是:

  • 实现可能会有所不同(但作为一般规则,直接路径性能更好)。
  • 差异可能很小,无关紧要,尤其是对于小型文档。
  • 与所有性能问题一样,在优化之前进行测量以避免在真正的瓶颈之外的领域花费精力。
于 2015-05-04T15:42:00.677 回答
1

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

您应该编写一个小型 Java 程序来练习这两种不同的方式,然后看看运行 1000 次循环需要多长时间。

于 2015-05-04T15:44:05.640 回答
1

理解引导///构造是非常重要的。

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

root/a/b/c

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

//e/

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

于 2015-05-04T15:50:06.977 回答