如何使用xsl忽略重复项

时间:2016-10-19 17:29:05

标签: xslt

好的,我知道这已被覆盖了几次,但之前的答案似乎没有给出我正在寻找的结果。可能是xslt没有像我预期的那样线性处理,但如果不是,我不知道如何解决它。

假设我有一个xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <section>A</section>
  <divider/>
  <divider/>
  <section>B</section>
  <divider/>
  <section>C</section>
  <divider/>
  <divider/>
  <section>D</section>
  <divider/>
</root>

如您所见,偶尔会出现重复的元素。使用xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="2.0">
  <xsl:strip-space elements="*" />
  <xsl:template match="/root">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="section">
    <xsl:value-of select="text()"/>
  </xsl:template>

  <xsl:template match="divider">
    <xsl:if test="not(preceding-sibling::divider)">
      <xsl:text>--</xsl:text>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

我期待看到

A
--
B
--
C
--
D
--

......但这不是正在发生的事情。谁能告诉我我错过了什么?

我现在得到的是:

A
--
B
C
D

1 个答案:

答案 0 :(得分:1)

preceding-sibling::divider选择任何前一个兄弟divider元素。如果您想检查前一个兄弟不是divider,请使用not(preceding-sibling::*[1][self::divider])