在xslt中删除具有相同ID的第二个节点

时间:2014-11-28 10:56:04

标签: xml xslt xslt-2.0 exslt

我需要使用XSLT 2.0在xml文件中删除一些具有相同ID的节点。 结构是:

<Root>
  <media tipo="immagine" id="1">
    <numero>14.1</numero>
  </media>
  <media tipo="immagine" id="2">
    <numero>14.2</numero>
  </media>
  <media tipo="immagine" id="1">
    <numero>14.1</numero>
  </media>
</Root>

,结果必须是:

<Root>
  <media tipo="immagine" id="1">
    <numero>14.1</numero>
  </media>
  <media tipo="immagine" id="2">
    <numero>14.2</numero>
  </media>
</Root>

我有多个具有相同属性ID值的人。 感谢

2 个答案:

答案 0 :(得分:1)

假设您想要比较id并检查使用

<xsl:key name="by-id" match="*" use="@id"/>

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

<xsl:template match="*[@id and not(. is key('by-id', @id)[1])]"/>

答案 1 :(得分:0)

由于您使用 XSLT 2.0 ,您可以执行以下操作:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/Root">
    <Root>
        <xsl:for-each-group select="media" group-by="@id">
            <xsl:copy-of select="current-group()[1]"/>
        </xsl:for-each-group>
    </Root>
</xsl:template>

</xsl:stylesheet>