modes
mode
归属于所有
xsl:template
和
xsl:apply-templates
exsl:node-set
是事实上的标准(请注意,支持它的处理器的完整列表比该页面上的要大,例如.NET
XslCompiledTransform
<xsl:template match="/">
<xsl:variable name="round1-output">
<xsl:apply-templates select="/" mode="round1" />
</xsl:variable>
<xsl:apply-templates select="exsl:node-set($round1-output)" mode="round2" />
</xsl:template>
<xsl:template match="/" mode="round1">
...
<xsl:apply-templates mode="round1" />
...
</xsl:template>
<xsl:template match="/" mode="round2">
...
<xsl:apply-templates mode="round2" />
...
</xsl:template>
...
<xsl:template match="xs:complexType" mode="round1">
<xsl:param name="prefix" />
<xs:complexType name="{my:updateName($prefix, @name)}">
<!-- insert xs:sequence ONLY if the child is NOT xs:complexContent -->
<xsl:choose>
<xsl:when test="*[name()='xs:complexContent']">
<xsl:apply-templates select="node()" mode="round1"/>
</xsl:when>
<xsl:otherwise>
<xs:sequence>
<xsl:apply-templates select="node()" mode="round1"/>
</xs:sequence>
</xsl:otherwise>
</xsl:choose>
</xs:complexType>
<xsl:apply-templates select=".//xs:element" mode="round1"/>
</xsl:template>
<xsl:template match="xs:complexType" mode="round2">
<xsl:copy>
<xsl:apply-templates select="*|@*" mode="round2"/>
</xsl:copy>
</xsl:template>