微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xml – XSLT value()和position()给出不正确的索引

有人可以解释一下为什么我得到以下输出将下面的xsl文件应用于xml文件.

<?xml version="1.0" encoding="ISO-8859-1"?>
<source>    
    <number>1</number> 
    <number>2</number> 
    <number>3</number> 
    <number>4</number> 
    <number>5</number> 
    <number>6</number> 
    <number>7</number> 
    <number>8</number> 
</source>

====================================

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="number">
   <p>
   <xsl:value-of select="position()"/>
   <xsl:text> of </xsl:text>
   <xsl:value-of select="last()"/>
   </p>
</xsl:template>
</xsl:stylesheet>

======================================

<p>2 of 17</p> 
    <p>4 of 17</p> 
    <p>6 of 17</p> 
    <p>8 of 17</p> 
    <p>10 of 17</p> 
    <p>12 of 17</p> 
    <p>14 of 17</p> 
    <p>16 of 17</p>

我不太明白为什么输出不是8中的1,而是8中的2,依此类推.

解决方法

尝试添加条带空间,如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
  <xsl:strip-space elements="*"/>
  <xsl:template match="number">
   <p>
   <xsl:value-of select="position()"/>
   <xsl:text> of </xsl:text>
     <xsl:value-of select="last()"/>
   </p>
</xsl:template>
</xsl:stylesheet>

这给出了以下输出

<p>1 of 8</p>
<p>2 of 8</p>
<p>3 of 8</p>
<p>4 of 8</p>
<p>5 of 8</p>
<p>6 of 8</p>
<p>7 of 8</p>
<p>8 of 8</p>

这是由于空白问题,如此document中所述.基本上,节点集包含与模板不匹配的空白节点,但对每个节点的索引有贡献.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。