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