2014-11-28 5 views
0

Мне нужно удалить некоторый узел с тем же идентификатором в XML-файле, используя XSLT 2.0. Структура:Удалить второй узел с тем же идентификатором в xslt

<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. Благодаря

ответ

1

Предполагая, что идентификатор все, что вы хотите, чтобы сравнить и проверить Использовать

<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])]"/> 
+0

Спасибо !!! Это работает – steguozzo

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> 
Смежные вопросы