我正在尝试创建一个模板,该模板要么呈现一些内容,要么插入一个占位符来指示内容的缺失:
<xsl:template name="information">
<xsl:param name="content">
<xsl:choose>
<xsl:when test="$content">
<Content>
<xsl:apply-templates select="$content/node()" />
</Content>
</xsl:when>
<xsl:otherwise>
<PlaceHolder/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
这工作得很好,直到content
是一个结果树片段:
<xsl:call-template name="information">
<xsl:with-param name="content">Yes</content>
</xsl:call-template>
我正在使用Microsoft . net XSLT引擎,因此我可以在参数上调用msxsl:node-set()
以获得一个可行的节点集,但是我不知道如何测试参数是否需要这种处理。到目前为止,生成内容的情况较少。
是否有一种方法使此模板适用于适当的节点集和结果树片段?
XslCompiledTransform
在。net 2.0和以后的版本支持exsl:object-type
http://exslt.org/exsl/functions/object-type/index.html所以你可以检查变量的类型,如果需要的话。另一方面,我不认为在节点集而不是结果树片段上调用msxsl:node-set
有问题,它只是返回节点集不变。