这种简短而完全“推式”的转变:
<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="cd/node()"/>
<xsl:template match="cd[position() >= 3 and 4 >= position()]/title">
<xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于提供的 XML 文档时:
<catalog>
<cd>
<title>Empire Burlesque</title>
</cd>
<cd>
<title>Hide your heart</title>
</cd>
<cd>
<title>Greatest Hits</title>
</cd>
<cd>
<title>Still got the blues</title>
</cd>
</catalog>
产生想要的正确结果:
<title>Greatest Hits</title>
<title>Still got the blues</title>
说明:
空体模板<xsl:template match="cd/node()"/>
可防止处理(“删除”) a 的任何子级cd
。
第二个模板仅针对不小于 3 且不大于 4 的 a 的子元素覆盖第一个模板。它有效地复制匹配的title
元素。cd
position()
title
该<xsl:strip-space elements="*"/>
指令通过从 XML 文档中删除所有仅包含空格的文本节点来使这一切成为可能。这样,cd
由指令形成的节点列表中的元素位置(在元素<xsl:apply-templates>
的内置 XSLT 模板中)将是 1、2、3、4 而不是 2、4、6、8。