在Xalan XSLT 1.0中,如何将变量传递给模板匹配?

时间:2011-11-07 19:59:06

标签: xslt xpath xalan

我们在Java中使用Xalan XSLT 1.0,我们希望将变量传递给模板匹配,以避免在XSL文件中硬编码元素名称。样式表编译,但返回的日期是错误的。我们使用正确的语法吗?

可能的XML输入......

 <books>   
    <book/>
    <book/>
 </books>

 <dvds>
     <dvd/>
     <dvd/>
 </dvds>


<xsl:variable name="matchElement" select="'book'"/>
<!-- OR -->
<xsl:variable name="matchElement" select="'dvd'"/>

<xsl:template match="/*[local-name() = $matchElement]">  

2 个答案:

答案 0 :(得分:2)

xsl:template

<xsl:template match="/*[local-name() = $matchElement]"> 

从root匹配。

/中删除/*或将其更改为//*(具体取决于样式表的其余部分的设计方式)。

此外,如果您使用xsl:param而不是xsl:variable,则可以从命令行设置值。

答案 1 :(得分:2)

您的变量语法是正确的,但请注意,在XSLT 1.0匹配模式中使用变量或参数引用在技术上是非法的。但是,Xalan可能已经在标准之外实现了这种行为。 (@ DevNull关于你的表达的评论也适用。)