XSLT:如果检测到重复项,则跳过这两个元素

时间:2018-02-05 13:16:55

标签: xml xslt

我有一个与此类似的XML:

<elements>
  <element>
     <value>1</value>
  </element>
  <element>
     <value>1</value>
  </element>
</elements>

如果多个<element>的值为1,我想跳过所有<element>个元素。换句话说,我的新XML结构不允许两个或多个<element>元素具有相同的<value>值。

有没有办法让XSL实现这个目标? “前面”测试似乎不是我需要的,所以我可以就如何处理这个问题使用一些建议。

1 个答案:

答案 0 :(得分:0)

以下XSLT-1.0样式表会删除所有出现的<element>元素(如果它们出现多次)。 标识模板只复制XML的其余部分。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
  <xsl:key name="doubles" match="element" use="value" />

  <xsl:template match="text()" />

  <!-- identity template -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
   </xsl:template>  

  <xsl:template match="element">
    <xsl:if test="count(key('doubles',value)) &lt; 2">
      <xsl:copy-of select="." />
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

使用输入XML,输出为:

<elements>      
</elements>