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)
哪一个更快,更好,原因是什么?谢谢!
如果 XSLT 处理器不是 naive 的,这两个方法应该同时执行,因为当使用相同的参数调用文档函数时,无论多少次,它都应该返回相同的结果。
这两种方法都不是高效的,因为使用缩写//会导致遍历整个文档树。
我建议以下方法比正在讨论的两种方法更有效:
<xsl:variable name="vCities" select="document($pUrl)//cities"/>
Run Code Online (Sandbox Code Playgroud)
那么只能参考 $vCities。
这样你只遍历了文档一次。
| 归档时间: |
|
| 查看次数: |
1064 次 |
| 最近记录: |