XSLT document():多次调用它会慢吗?

bas*_*ero 8 java xml xslt xalan

更新17.Jul.2013:
XALAN 2.7 不缓存 document()请求中的呼叫.因此,将每个所需文档存储在XSL中的变量中至关重要.


我已经搜索了很长一段时间,并没有找到我的简单问题的具体答案:

哪种方法更快或者编译器是否"足够"以便两种变体都相同?

注意:我使用的是Xalan 2.7(JDK 1.6中的默认实现):

1)我必须读取外部XML中的属性:

<xsl:value-of select="document($path)/person/address/city"/>
Run Code Online (Sandbox Code Playgroud)

每当我需要这个城市时,我都会使用上面的表达式(让我们说100次)

2)我没有调用document()100次,而是将XML节点存储在变量中:

<xsl:variable name="node" select="document($path)"/>
Run Code Online (Sandbox Code Playgroud)

然后我用了100次

<xsl:value-of select="$node/person/address/city"/>
Run Code Online (Sandbox Code Playgroud)

哪一个更快,更好,原因是什么?谢谢!

Dim*_*hev 3

如果 XSLT 处理器不是 naive 的,这两个方法应该同时执行,因为当使用相同的参数调用文档函数时,无论多少次,它都应该返回相同的结果。

这两种方法都不是高效的,因为使用缩写//会导致遍历整个文档树。

我建议以下方法比正在讨论的两种方法更有效:

<xsl:variable name="vCities" select="document($pUrl)//cities"/>
Run Code Online (Sandbox Code Playgroud)

那么只能参考 $vCities

这样你只遍历了文档一次。

  • +1。Dimitre,你提到的幂等规则能给我一个参考吗?我以前听说过这一点,但很惊讶没有在 XSLT 1.0 或 2.0 规范中看到它。 (3认同)