XSLT 1.0 - 如何测试xsl:when语句中参数中包含的属性

时间:2016-07-22 16:42:10

标签: xslt xpath saxon

我有一个XSLT模板,它将一大块HTML传递给参数。我需要将该参数传递给另一个模板,在该模板中,它将被转换为两种方式之一,具体取决于参数中包含的顶级HTML元素的ID属性。是否可以在XSLT 1.0中使用Xpath测试参数的内容?这是我的HTML:

<div id="someID">There could be many child nodes here</div>

这是我的XSLT测试:

<xsl:when test="$content/@id = 'someID'">...</xsl:when>

Saxon 6.5.3在此失败并告诉我切换到使用exsl或指定版本1.1(没有任何影响),但我很想知道是否有一种聪明的方法来实现这一点我现有的工具。

2 个答案:

答案 0 :(得分:1)

  

参数在模板中声明如下:<xsl:param name="content"><xsl:apply-imports/></xsl:param>

严格来说,这是变量,而不是参数。其内容是结果树片段。正如错误消息所示,您必须先将其转换为 node-set ,然后才能进一步处理它(在XSLT 1.0中)。

做类似的事情:

<xsl:variable name="content-rtf">
    <xsl:apply-imports/>
</xsl:variable>

<xsl:variable name="content" select="exsl:node-set($content-rtf)" />

<xsl:choose>
    <xsl:when test="$content/div/@id = 'someID'">
        <!-- some result -->
    </xsl:when>
    <xsl:otherwise>
        <!-- another result -->
    </xsl:otherwise>
</xsl:choose>

添加后:

xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl"

打开<xsl:stylesheet>标记。

未经测试,因为未提供可重复的示例。

答案 1 :(得分:0)

<xsl:when test="$content/div[@id = 'someID']">...</xsl:when>