我在XSLT中的变量中有一大块XML。这是概述:
....
<xsl:variable name="node_clone">
<xsl:call-template name="node_content"/>
</xsl:variable>
<xsl:apply-templates select="exsl:node-set($node_clone)/*">
<xsl:template name="node_content">
<xsl:copy-of select"exsl:node-set($dummy_container)//sometag[someatr='..']">
<xsl:template>
...
<xsl:variable name="dummy_container">
<big_chunk_of_xml>
...
<!--THIS IS WHAT I WANT TO ACCESS FAST -->
<sometag someatr="value">....
</big_chunk_of_xml>
</xsl>
此代码从变量(dummy_container)中的一大块xml中获取一个元素,克隆它并在其上调用模板。
这将多次发生,并且dummy_container中的大块xml将被多次访问。我可以在sometag的someatr上使用key()来加快速度吗?
呼叫的工作方式可能没有意义,它已被简化为专注于真正的问题:索引。所以请不要被困在这里做的事情上。我正在使用XSLT 1.0
答案 0 :(得分:0)
您可以定义一个键并进行搜索:
<xsl:key name="k1" match="sometag[@someatr]" use="@someatr"/>
<xsl:variable name="lkp-doc" select="exsl:node-set($dummy-container)"/>
<xsl:template name="node-content">
<xsl:param name="value"/>
<!-- need to change context document here to make sure the key function
works with the right document -->
<xsl:for-each select="$lkp-doc">
<xsl:copy-of select="key('k1', $value)"/>
</xsl:for-each>
</xsl:template>