鉴于此 XML;
<root>
<foo x='1'/>
<foo x='3'/>
<foo x='7'/>
</root>
和这个样式表;
<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