当子节点满足特定要求时删除XML节点

aza*_*oth 8 xml xslt

我有以下xml:

<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>
Run Code Online (Sandbox Code Playgroud)

我想成为:

<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>
Run Code Online (Sandbox Code Playgroud)

因为我需要删除每个空的<giro>节点<nombreGiro>

使用XSLT最好的方法是什么?
先感谢您

Dim*_*hev 11

用途:

<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>
Run Code Online (Sandbox Code Playgroud)

当此转换应用于提供的XML文档时:

<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>
Run Code Online (Sandbox Code Playgroud)

产生了想要的正确结果:

<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>
Run Code Online (Sandbox Code Playgroud)