【问题标题】:Remove XML node when child node meets certain requirements当子节点满足特定要求时移除 XML 节点
【发布时间】:2010-09-01 16:42:55
【问题描述】:

我有以下 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>

我想成为什么样的人:

<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>

因为我需要删除&lt;nombreGiro&gt; 为空的每个&lt;giro&gt; 节点

使用 XSLT 的最佳方法是什么?
提前谢谢你

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    使用

    <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>
    

    当此转换应用于提供的 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>
    

    产生想要的正确结果

    <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>
    

    【讨论】:

    • 谢谢,正是我所需要的
    • +1 好答案。你也可以使用&lt;xsl:template match="giro[nombreGiro[not(node())]]"/&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多