是否有一些关于如何在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:section
(2)更差。我可以概括一下并说选择器选择性越快它会越快吗?
另一个例子:如果你想要第二个section元素,你可以从所有部分的子树中提取它,或者直接用//d:section[@userlevel]
选择它。这个选择器使用更具选择性但又更快的属性?
使用XPath时应该做什么(或避免)的经验法则?
答案 0 :(得分:2)
我认为您需要查看特定的XSLT或XPath或XQuery处理器,甚至是特定处理器和特定树模型,然后运行测试。例如//foo
非常常见,可能会在实现中进行优化。
当我在输入样本上使用XQuery //section
十次运行Saxon 9.5 Java HE时,我得到“平均执行时间:1.007739ms”而/chapter/section
我得到“平均执行时间:1.443799ms ”