这种转变:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*[item[@column='right']]">
<Heading>Data</Heading>
<xsl:call-template name="identity"/>
</xsl:template>
</xsl:stylesheet>
应用于提供的 XML 文档时:
<data>
<item column="left" value="1" />
<item column="left" value="2" />
<item column="right" value="3" />
<item column="left" value="4" />
<item column="right" value="5" />
<item column="right" value="6" />
<item column="right" value="7" />
<item column="left" value="8" />
<item column="right" value="9" />
<item column="right" value="10" />
</data>
产生(我猜是想要的结果,因为没有指定想要的结果!!!):
<Heading>Data</Heading>
<data>
<item column="left" value="1"/>
<item column="left" value="2"/>
<item column="right" value="3"/>
<item column="left" value="4"/>
<item column="right" value="5"/>
<item column="right" value="6"/>
<item column="right" value="7"/>
<item column="left" value="8"/>
<item column="right" value="9"/>
<item column="right" value="10"/>
</data>
如果您想失去使用恒等规则的灵活性,则可以将上述转换简化为:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/*" name="top">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="/*[item[@column='right']]">
<Heading>Data</Heading>
<xsl:call-template name="top"/>
</xsl:template>
</xsl:stylesheet>