您似乎理解所涉及的原则,因此您不需要任何解释。
如果您想知道Xalan 2.7是如何做到的,那么通过使用Xalan 2.7进行测试,可以找到明确的答案,并且测试结果足够大。
正如@Dimitre指出的那样,这些都不一定是有效的,因为 // 虽然有些处理器非常聪明地优化这些路径,但可以缓解这个问题。您可以通过保持处理器来提高处理器的效率 city 变量中的元素:
//
city
<xsl:variable name="city" select="(document($path)//city)[1]"/> ... <xsl:value-of select="$city"/>
我补充道 [1] 在那里进行进一步的优化,因为你说“城市”(即你只期望一个),这允许智能处理器在找到第一个之后停止 city 元件。
[1]
的 如果XSLT处理器不天真,则两种方法应该同时执行 强> ,因为文档函数在使用相同的参数调用时应返回相同的结果,无论多少次。
的 这两种方法效率都不高 强> ,因为使用了 // 缩写,它导致遍历整个文档树。
的 我会推荐 强> 以下内容比正在讨论的两种方法更有效:
<xsl:variable name="vCities" select="document($pUrl)//cities"/>
的 然后只参考 强> $vCities 。
$vCities
这样,您只遍历了一次文档。