有一個全局變量XSLT樣式表:
<xsl:variable name="lang" select="/response/str[@name='lang']"/>
問題
從哪兒來的限制,在謂詞使用變量是xsl:template
匹配模式不正確,但在xsl:apply-templates
選擇模式中可以接受?
<!-- throws compilation error, at least in libxslt -->
<xsl:template match="list[@name='item_list'][$lang]"/>
<!-- works as expected -->
<xsl:template match="list[@name='item_list'][/response/str[@name='lang']]"/>
<!-- works as expected -->
<xsl:template match="response">
<xsl:apply-templates select="list[@name='item_list'][$lang]">
</xsl:template>
我不確定這是限制,但你確定你的'$ lang'包含字符串值(或數字),但沒有一些節點集? – YuS 2012-01-12 17:04:26
@yuri,它確實包含一個節點集,但我沒有看到上下文中不允許節點集的原因。 – newtover 2012-01-12 17:09:19
我不能告訴你關於爲什麼限制是在XSLT 1.0中指定的細節,但我可以告訴你它已經在XSLT 2.0中消失了,所以你可能想考慮移動到該版本的語言和它的一個實現撒克遜9或AltovaXML。 – 2012-01-12 17:59:37