尝试使用两遍传递这个简单的xml:
<root>
<a>Init</a>
</root>
2011年的答案(针对同一问题)似乎不起作用。 请参阅:Doing a double-pass in XSL?)。模板(与原始帖子相同)是:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="firstPassResult">
<xsl:apply-templates select="/" mode="firstPass"/>
</xsl:variable>
<xsl:template match="/" mode="firstPass">
<test>
<firstPass>
<xsl:value-of select="root/a"/>
</firstPass>
</test>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="$firstPassResult" mode="secondPass"/>
</xsl:template>
<xsl:template match="/" mode="secondPass">
<xsl:message terminate="no">
<xsl:copy-of select="."/>
</xsl:message>
</xsl:template>
</xsl:stylesheet>
我正在使用XSLT 2.0。欢迎任何想法/反馈......请。
答案 0 :(得分:0)
您的上一个模板:
<xsl:template match="/" mode="secondPass">
<xsl:message terminate="no">
<xsl:copy-of select="."/>
</xsl:message>
</xsl:template>
将整个输出定向到message - 您的实现可能会或可能不会显示。如果要在输出树中查看结果,请将其更改为:
<xsl:template match="/" mode="secondPass">
<xsl:copy-of select="."/>
</xsl:template>
P.S。我不确定这是两遍处理的最佳例子。你为什么不问自己的问题,描述你自己的情况。