0
鑑於此XML;爲什麼不能在XSL模板選擇器謂詞中使用變量?
<root>
<foo x='1'/>
<foo x='3'/>
<foo x='7'/>
</root>
and this stylesheet;
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<result>
<xsl:apply-templates select="foo"/>
</result>
</xsl:template>
<xsl:template match="foo[@x > 2]">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:transform>
我得到想要的結果;
<result>
<bar x="3"/>
<bar x="7"/>
</result>
但是,如果模板爲match
foo
被改變到使用可變$i
而不是恆定;
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="i" select="2"/>
<xsl:template match="root">
<result>
<xsl:apply-templates select="foo"/>
</result>
</xsl:template>
<xsl:template match="foo[@x > $i]">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:transform>
然後我得到這個錯誤;
XSLTProcessor::importStylesheet(): compilation error: Failed to compile predicate
我做錯了什麼或不能使用變量嗎?
我曾嘗試以其他方式聲明變量,例如;
<xsl:variable name="i" select="2"/>
<xsl:variable name="i">2<xsl:variable>
但它總是無法編譯樣式表。
我正在使用PHP XSL 1.0處理器libxslt;
PHP Version 5.3.2
libxslt Version 1.1.23
感謝您的澄清。 –