如何导入样式表,应用实际参数值 被称为样式表?这是一个例子。
假设我有一个带有参数“x”的通用样式表。 它看起来像这样,位于“general.xslt”。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:param name="x" as="xs:string" />
... style-sheet content ...
</xsl:stylesheet>
我有一个更高级别的样式表(specific.xslt),它希望通过输入合并general.xslt的功能。这个更高级别的样式表(specific.xslt)采用参数“y”。需要导入更高级别的样式表 general.xslt应用实际参数,是一些函数 y,到形式参数x。如果这是合法的XSLT 2.0语法,它会读到这样的东西:
更高级别的样式表:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:param name="y" as="xs:string" />
<xsl:import href="general.xslt">
<xsl:with-param name="x" select="some-function($y)" />
</xsl:import>
<xsl:function name="some-function" as="xs:string">
<xsl:param name="value" as="xs:string" />
... content goes here ...
</xsl:function>
... more content ...
</xsl:stylesheet>
当然上面的内容不是合法的语法,但它说明了我想要实现的目标 - 使用实际参数调用样式表,方法与调用带参数的模板类似。这在任何版本的XSLT中都可以吗?
迈克尔凯答案的插图
general.xslt: 这个低级样式表需要一个参数。形式参数是x。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0"
exclude-result-prefixes="xsl xs fn">
<xsl:param name="x" as="xs:string" />
<xsl:template match="/">
<root>
The value of x is <xsl:value-of select="$x" />
</root>
</xsl:template>
</xsl:stylesheet>
specific.xslt: 这个高级样式表需要一个参数。形式参数是y。
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://my.com"
version="2.0"
exclude-result-prefixes="xsl xs fn my">
<xsl:import href="general.xslt" />
<xsl:param name="y" as="xs:string" />
<xsl:function name="my:some-function" as="xs:string">
<xsl:param name="value" as="xs:string" />
<xsl:value-of select="concat( $value, '!') " />
</xsl:function>
<xsl:variable name="x" select="my:some-function($y)" />
<xsl:template match="/">
<xsl:apply-imports/>
</xsl:template>
</xsl:stylesheet>
Saxon的命令行调用:
Transform.exe -s:specific.xslt -xsl:specific.xslt -o:specific-out.xml y=abc
输出:
<?xml version="1.0" encoding="UTF-8"?><root>The value of x is abc!</root>
general.xslt的实际参数是'abc!'
答案 0 :(得分:1)
您可以使用xsl:param或xsl:变量覆盖xsl:param(出现在顶层,即导入模块中xsl:stylesheet的子代)。
<xsl:variable name="x" select="some-function($y)" />