我有以下测试代码...我正在尝试将节点集作为参数传递。几个小时后,我终于能够将它传递给我的模板。
我如何将节点集传递给模板:
<xsl:call-template name="listing">
<xsl:with-param name="customData">
<xsl:apply-templates select="exslt:node-set($data)"/>
</xsl:with-param>
</xsl:call-template>
我的模板如何接收它:
<xsl:template name="listing">
<xsl:param name="customData" select="/.."/>
<xsl:variable name="data">
<xsl:choose>
<xsl:when test="not($customData)">
<xsl:value-of select="/data"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$customData"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<textarea><xsl:copy-of select="$data"></xsl:copy-of></textarea>
</xsl:call-template>
如果我用一个衬里设置参数,那么它不会抱怨......例如:
<xsl:variable name="data" select="$customData"/>
但是,一旦我尝试像这样设置它,它就会中断:
<xsl:variable name="data">
<xsl:value-of select="$customData"/>
</xsl:variable>
收到此错误消息: org.apache.xpath.objects.XRTreeFrag 无法转换为 org.apache.xpath.objects.XNodeSet
我只能找到另一个可以追溯到 2000 年的线程,谈论这个类似的问题......我需要使用类似 node-set($customData)/* 的东西重新设置它,但我试过了,它是不行。
编辑: 好的,我可以确认我已成功通过模板中的节点集。但我仍然无法将它复制到我的变量中......它一直说它仍然是一个 RTF。
<xsl:template name="listing">
<xsl:param name="customData" as="node-set"/>
<!--<xsl:variable name="data" select="/data"/>-->
<xsl:variable name="data">
<xsl:choose>
<xsl:when test="count($customData) != 0">
<xsl:copy-of select="$customData"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="/data"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<textarea><xsl:value-of select="$customData/record[1]"/></textarea>
<textarea><xsl:value-of select="/data/record[1]"/></textarea>
<textarea><xsl:value-of select="$data/record[1]"/></textarea>
</xsl:template>
上面的测试表明我可以毫无问题地访问 $customData 和原始 /data ,它们都显示了记录......但是 $data 搞砸了。所以这意味着从 $customData 到 $data 的副本不起作用......
我尝试了以下方法,它们都不起作用:
<xsl:copy-of select="$customData"/>
<xsl:value-of select="$customData"/>
<xsl:apply-templates select="exslt:node-set($customData)"/>
<xsl:apply-templates select="exslt:node-set($customData)/data"/>
任何的想法...?