2010-09-01 12 views
8

tengo el siguiente xml:Eliminar nodo XML cuando el nodo hijo cumple con ciertos requisitos

<listaGiros> 

    <giro> 
     <idGiro type="int">89</idGiro> 
     <nombreGiro type="varchar">foo</nombreGiro> 
    </giro> 

    <giro> 
     <idGiro type="int">78</idGiro> 
     <nombreGiro type="varchar">apple</nombreGiro> 
    </giro> 

    <giro> 
     <idGiro type="int">10</idGiro> 
     <nombreGiro type="varchar"/> 
    </giro> 
</listaGiros> 

la que quiero llegar a ser:

<listaGiros> 

    <giro> 
     <idGiro type="int">89</idGiro> 
     <nombreGiro type="varchar">foo</nombreGiro> 
    </giro> 

    <giro> 
     <idGiro type="int">78</idGiro> 
     <nombreGiro type="varchar">apple</nombreGiro> 
    </giro> 

</listaGiros> 

ya que necesito para eliminar todos los <giro> nodo cuyo <nombreGiro> está vacía

¿Cuál es la mejor manera de hacerlo utilizando XSLT?
gracias de antemano

Respuesta

10

Uso:

<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:strip-space elements="*"/> 

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

<xsl:template match="giro[not(nombreGiro/text())]"/> 
</xsl:stylesheet> 

cuando se aplica esta transformación en el documento XML proporcionado:

<listaGiros> 
    <giro> 
     <idGiro type="int">89</idGiro> 
     <nombreGiro type="varchar">foo</nombreGiro> 
    </giro> 
    <giro> 
     <idGiro type="int">78</idGiro> 
     <nombreGiro type="varchar">apple</nombreGiro> 
    </giro> 
    <giro> 
     <idGiro type="int">10</idGiro> 
     <nombreGiro type="varchar"/> 
    </giro> 
</listaGiros> 

el resultado deseado, correcta se produce :

<listaGiros> 
    <giro> 
     <idGiro type="int">89</idGiro> 
     <nombreGiro type="varchar">foo</nombreGiro> 
    </giro> 
    <giro> 
     <idGiro type="int">78</idGiro> 
     <nombreGiro type="varchar">apple</nombreGiro> 
    </giro> 
</listaGiros> 
+0

Gracias, es justo lo que necesitaba – azathoth

+0

+1 Buena respuesta. También puede usar '' –

Cuestiones relacionadas