我有一个XSL模板,当在两个不同的上下文中使用时会给出不同的结果。
显示缺陷的模板是:
<xsl:template match="*" mode="blah">
<!-- snip irrelevant stuff -->
<xsl:if test="see">
<xsl:message>Contains a cross-ref. <xsl:value-of select="."/></xsl:message>
</xsl:if>
<xsl:apply-templates select="."/>
</xsl:template>
假设:
<el>This is a '<see cref="foo"/>' cross-referenced element.</el>
在某种情况下,我得到了理想的结果:
Contains a cross-ref. This is a ' ' cross-referenced element.
(<see/>
作为XML元素处理,最终与另一个模板匹配。)
但在另一种情况下,xsl:if
不会触发,如果我用<xsl:message><xsl:value-of select="."/>
输出内容,我会得到:
This is a '<see cref="foo"/>' cross-referenced element.
在我看来,在后一种行为不当的情况下,它的表现就像是输出转义的。那有意义吗?我吠叫错了树吗?这是一个典型的复杂XSL情况,并且尝试跟踪调用堆栈很困难;是否有我应该寻找的特定XSLT处理命令?