0

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 値を持つものが複数あります。ありがとう

4

2 に答える 2

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])]"/>
于 2014-11-28T11:01:09.383 に答える
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>
于 2014-11-28T11:18:25.137 に答える