<xsl:template match="foobar">
<xsl:if test="a[name = 'foo']">
<xsl:apply-templates select="x/y[1]|x/y[2]" />
</xsl:if>
<xsl:if test="a[name = 'bar']">
<xsl:apply-templates select="x/y[3]|x/y[4]|x/y[5]" />
</xsl:if>
</xsl:template>
我想传递位置路径表达式“x / y [1] | x / y [2]”和x / y [3] | x / y [4] | x / y [5]作为参数因为此值可能会在将来发生变化,我不想编辑模板,只需要编辑参数定义。我想将上面的模板用作
<xsl:template match="foobar">
<xsl:if test="a[name = 'foo']">
<xsl:apply-templates select="$param1" />
</xsl:if>
<xsl:if test="a[name = 'bar']">
<xsl:apply-templates select="$param2" />
</xsl:if>
</xsl:template>
据我所知,这是不可能的。外部化位置路径表达式的最佳方法是什么?
非常感谢提前
答案 0 :(得分:1)
<xsl:template match="foobar">
<xsl:param name="param1" />
<xsl:param name="param2" />
<xsl:if test="a[name = 'foo']">
<xsl:apply-templates select="$param1" />
</xsl:if>
<xsl:if test="a[name = 'bar']">
<xsl:apply-templates select="$param2" />
</xsl:if>
</xsl:template>
然后用:
调用模板<xsl:call-template name="foobar">
<xsl:with-param name="param1" select="actualXPath1"/>
<xsl:with-param name="param2" select="actualXPath2"/>
</xsl:call-template>
或者您可以在XSLT文件的开头使用全局参数。
<xsl:param name="param1" select="actualXPath1"/>
<xsl:param name="param2" select="actualXPath2"/>
<!-- continue with template definitions -->
...
这article可能会有所帮助。
答案 1 :(得分:0)
如果您不介意使用专有函数或EXSLT,则可以动态评估可用作字符串的XPath表达式:
然后,您可以将这些XPath字符串作为全局参数传递给XSLT,或者将它们存储在外部文件中。