理解postion()和value-of

    技术2022-05-11  85

    到底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 本身即可输出节点的文本内容。


    最新回复(0)