是否可以为导入的样式表的参数赋值?
我期待像
这样的东西<xsl:import ... >
<xsl:with-param ...
</xsl:import>
但不允许这样做。
样式表参数中也禁止使用tunnel =“yes”。
答案 0 :(得分:18)
试试这个:
main.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="import.xsl"/>
<xsl:variable name="param" select="'some-value'"/>
<xsl:template match="/">
<xsl:call-template name="foo"/>
</xsl:template>
</xsl:stylesheet>
import.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="param" select="'default'"/>
<xsl:template name="foo">
<out><xsl:value-of select="$param"/></out>
</xsl:template>
</xsl:stylesheet>
导入样式表中的xsl:变量可以覆盖导入样式表中的xsl:param,这有效地设置了参数的值。
答案 1 :(得分:4)
快速浏览一下规格表明不允许这样的结构:
简而言之,href
是唯一允许的属性,元素正文中不允许内容。
但是,如果我理解您的用例,那么您应该以正常方式设置参数(使用您的宿主语言)。它在导入的样式表中定义并不重要。例如,假设您有此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="import.xsl"/>
<xsl:template match="/">
<xsl:value-of select="$test"/>
</xsl:template>
</xsl:stylesheet>
导入此内容:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="test" select="'default'"/>
</xsl:stylesheet>
...然后以正常方式设置test
参数应该正常工作。请注意,如果要提供新的默认值,也可以从导入的工作表中“屏蔽”参数。
所以,将它添加到第一个样式表:
<xsl:param name="test" select="'default2'"/>
...会导致它打印default2
(覆盖导入的工作表中的默认值)。
答案 2 :(得分:2)
也许这也有帮助:
在XSLT 2.0中,可以将参数传递给导入的样式表中的覆盖模板,并使用: <xsl:apply-imports>
从覆盖模板中实例化它。
使用<xsl:apply-imports>
传递参数只是XSLT 2.0的一项功能 - 这在XSLT 1.0中是不可能的。
答案 3 :(得分:1)
只是为了添加lwburk的优秀答案(+1),这是另一个为导入的样式表中的参数赋值的示例。
您不需要将xsl:param
添加到主样式表中;您只需在调用样式表时指定值(例如,在命令行上)。
<强> main.xsl 强>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="import.xsl"/>
<xsl:template match="/">
<xsl:call-template name="foo"/>
</xsl:template>
</xsl:stylesheet>
<强> import.xsl 强>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="param" select="'default'"/>
<xsl:template name="foo">
<out><xsl:value-of select="$param"/></out>
</xsl:template>
</xsl:stylesheet>
示例saxon命令行(设置新参数值)
java -cp "saxon9.jar" net.sf.saxon.Transform -s:input.xml -xsl:main.xsl -o:output.xml param="kuba"
<强>的Output.xml 强>
<out>kuba</out>