到底position() 代表了什么呢?它是节点在源文档中的位置吗?
position()是指正在处理的节点在节点集中的位置,而这里的节点集是指使用<xsl:apply-templates>或<xsl:for-each>的select属性所定义的临时结果树(姑且这样理解),所以position()返回的不是节点在源文档中的位置,而是它在临时结果树片段中的位置。
<?xml version="1.0" encoding="UTF-8">
<people>
<total>3</total>
<person>
<name>zhang</name>
<age>28</age>
</person>
<person>
<name>li</name>
<age>29</age>
</person>
<person>
<name>wang</name>
<age>28</age>
</person>
</people>
XSLT文件:
<xsl:template match="/">
<xsl:for-each select="people/*">
<xsl:value-of select="concat(name(),':',postion())"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
和XSLT文件:
<xsl:template match="/>
<xsl:for-each select="people/person[age=28]">
<xsl:value-of select="concat(name(),':',postion())"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
的输出结果来看
total:1 person:2 person:3 person:4
person:1 person2
也印证了这一点。
另外:<xsl:value-of select="AA"/>和默认模板规则没有什么必然的联系。这一点,我们覆盖默认模板<xsl:template match="text()">即可得出结论。也就是说xsl:value-of 本身即可输出节点的文本内容。