2 つの異なるコンテキストで使用すると異なる結果が得られる 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 処理コマンドはありますか?