我有一个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(没有任何影响),但我很想知道是否有一种聪明的方法来实现这一点我现有的工具。
答案 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>