如何在每次迭代xsl时识别新项目?

时间:2016-04-15 03:48:48

标签: xml xslt

我有下面的XML,

<employees>
 <employee>
  <id>1</id>
  <name>AAA</name>
 </employee>
 <employee>
  <id>1</id>
  <name>AAA</name>
 </employee>
 <employee>
  <id>2</id>
  <name>AAA</name>
 </employee>
 <employee>
  <id>2</id>
  <name>AAA</name>
 </employee>
</employees>

我通过xsl:foreach迭代上述XML。我有一个要求是在显示id&#39; 1&#39;之后的记录。我必须留一个空行。在XSL中,我们不能存储前一项的id值以与当前元素进行比较。那么我们如何识别具有新ID的项目? 如何通过使用来实现这一目标?

在这里输入代码

谢谢, Santhosh。

1 个答案:

答案 0 :(得分:0)

问:我有一个要求是在显示id&#39; 1&#39;我必须保留一行空白。
您可以使用 preceding-sibling :: 来检查&#34;之前的项目&#34;。

   <xsl:variable name="this" select="." />
    <xsl:if test="$this/id != preceding-sibling::employee[1]/id" >
        <xsl:text>&#10;</xsl:text>
    </xsl:if>

我不会在这里使用for-each(但也可能)考虑使用模板。尝试这样的事情:

    <xsl:template match="employee">
        <xsl:variable name="this" select="." />
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
        <xsl:if test="$this/id != preceding-sibling::employee[1]/id" >
            <xsl:text>&#10; --------------;</xsl:text>
        </xsl:if>
    </xsl:template>