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

标签 xml xslt

谁能解释一下为什么我将以下 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> 

我不太明白为什么输出不是 1 of 8、2 of 8 等等。

最佳答案

尝试添加 strip-space 如下所示:

<?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 中所述.基本上,节点集包含与您的模板不匹配但有助于每个节点的索引的空白节点。

关于xml - XSLT value() 和 position() 给出了不正确的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20951533/

相关文章:

Java 如何读取包含单独 XML 的文本日志文件并提取 XML block

android - 圆形进度条未覆盖整个可用空间

c# - 错误 : The service System. Windows.Forms.Design.IEventHandlerService 已存在于服务容器中

xml - 如何使用可变条件将 XSLT 模板应用于节点副本(从先前的 XML 节点中提取)

C#:从 XML 架构 (XSD) 文件自动生成 DDL 和 ORM 类

java - 从 XML 节点 java 生成/获取 xpath

javascript - 追加 .eq() 导致重复

java - 使用 XSLT 递归加载相关 XML 文件并应用转换

html - 如何使用xsl :output获取带有url的doctype标签

xslt - 使用 XSLT 进行模式匹配