我们在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]">
答案 0 :(得分:2)
这xsl:template
:
<xsl:template match="/*[local-name() = $matchElement]">
从root匹配。
从/
中删除/*
或将其更改为//*
(具体取决于样式表的其余部分的设计方式)。
此外,如果您使用xsl:param
而不是xsl:variable
,则可以从命令行设置值。
答案 1 :(得分:2)
您的变量语法是正确的,但请注意,在XSLT 1.0匹配模式中使用变量或参数引用在技术上是非法的。但是,Xalan可能已经在标准之外实现了这种行为。 (@ DevNull关于你的表达的评论也适用。)