我有一个关心效率的 Java 程序。我在那里使用 XPaths。
在 XPath 中,我可以选择从根开始的元素
/root/a/b/c/d/e
或使用descendent-or-self
轴:
//e
这两种方法中最有效的方法是什么?
直接路径往往比使用更通用的后裔或自我 ( //
) 轴的路径执行得更好,但是:
我想 /root/a/b/c/d/e 会更有效,因为在第一种情况下,XPath 处理器可以消除很多分支,而在第二种情况下 (//e) XPath 处理器必须搜索整个文档树。
您应该编写一个小型 Java 程序来练习这两种不同的方式,然后看看运行 1000 次循环需要多长时间。
理解引导/
和//
构造是非常重要的。
前导/
开始一条始终与根节点相关的路径。因此,即使我们正在搜索子节点,XPath:
root/a/b/c
... 仍将返回c
XML 文档中的每个节点,即使它们不是第一个c
节点的后代。同样,XPath:
//e/
... 仍将返回e
XML 文档中的每个节点,而不仅仅是第一个c
节点的后代。