我和这个家伙有类似的问题:
using position() function in xslt
但我不需要编号,我只是想了解它的工作方式:
<?xml version="1.0" encoding="UTF-8"?> <test> <a>blah</a> <a>blah</a> <a>blah</a> <a>blah</a> </test>
对于此输入,以下样式表:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="select"> <xsl:apply-templates/> </xsl:template> <xsl:template match="a"> <xsl:value-of select="position()"/><br/> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
输出:
<html><body> 2<br>blah 4<br>blah 6<br>blah 8<br>blah </body></html>
为什么跳过不均匀的数字?
Why does it skip the uneven numbers?
因为当你在/级别时,你说:
<xsl:apply-templates/>
它将模板应用于根节点的所有节点子节点,并且(由于内置的模板规则)将模板应用于它们的所有后代 – 包括分隔< a>的文本节点.元素.
您将获得一个输入的不同结果:
<?xml version="1.0" encoding="UTF-8"?> <test><a>blah</a><a>blah</a><a>blah</a><a>blah</a></test>
或者如果您将样式表中的指令添加到:
<xsl:strip-space elements="*"/>
或者如果您选择性地应用模板,例如
<xsl:apply-templates select="//a"/>