我有一个 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 处理命令吗?