2

是否有一些关于如何在 xslt 中创建更高效​​的 xpath 选择器的一般提示或最佳实践?

例如,假设您有一个仅包含第一级部分的 DocBook XML 文档,如下所示:

<chapter>
  <section><info><title>my first section</title></info> ... </section>
  <section userlevel="expert"><info><title>my second section</title></info> ... </section>
  <section><info><title>my third section</title></info> ... </section>
</chapter>

认为在几乎所有情况下,像//d:section(1)这样的选择器都比像 ( /d:chapter/d:section2) 这样的选择器更糟糕。我可以概括一下,说选择器越有选择性,它就会越快吗?

再举一个例子:如果你想要第二个部分元素,你可以从所有部分的子树中拉出来,或者直接用//d:section[@userlevel]. 此选择器使用更具选择性但会更快的属性吗?

使用 XPath 时应该做什么(或避免)的经验法则?

4

1 回答 1

2

我认为您需要查看特定的 XSLT 或 XPath 或 XQuery 处理器,甚至查看特定的处理器和特定的树模型,然后运行测试。例如//foo,如此普遍以至于它可能在实现中被优化。

当我在您的输入样本上使用 XQuery 运行 Saxon 9.5 Java HE//section十次时,我得到“平均执行时间:1.007739ms”,而/chapter/section我得到“平均执行时间:1.443799ms”。

于 2013-06-19T15:01:45.500 回答