只使用简单的身份规则覆盖:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="linkCode">
<a href="file-{@code1}-{@code2}-{@code3}.html">this link</a>
</xsl:template>
<xsl:template match="parag">
<p><xsl:apply-templates select="node()|@*"/></p>
</xsl:template>
</xsl:stylesheet>
当此转换应用于以下 XML 文档时(将提供的片段包装到单个顶部元素中——以获得格式良好的 XML 文档):
<t>
<parag>blah blah blah</parag>
<parag>blah blah, refer to <linkCode code1="a" code2="b" code3="c"/> for further details.</parag>
</t>
产生了想要的正确结果:
<t>
<p>blah blah blah</p>
<p>blah blah, refer to <a href="file-a-b-c.html">this link</a> for further details.</p>
</t>
如果你想让顶部元素不输出:
只需添加此模板:
<xsl:template match="/*"><xsl:apply-templates/></xsl:template>
所以,完整的代码变成:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="linkCode">
<a href="file-{@code1}-{@code2}-{@code3}.html">this link</a>
</xsl:template>
<xsl:template match="parag">
<p><xsl:apply-templates select="node()|@*"/></p>
</xsl:template>
<xsl:template match="/*"><xsl:apply-templates/></xsl:template>
</xsl:stylesheet>