当子节点满足某些要求时删除XML节点
我有以下xml:当子节点满足某些要求时删除XML节点,xml,xslt,Xml,Xslt,我有以下xml: <listaGiros> <giro> <idGiro type="int">89</idGiro> <nombreGiro type="varchar">foo</nombreGiro> </giro> <giro> <idGiro type="int">78</idGiro>
<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>
89
福
78
苹果
10
我想成为:
<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>
89
福
78
苹果
因为我需要删除其
为空的每个
节点
使用XSLT的最佳方法是什么?提前感谢使用:
<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>
<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>
当此转换应用于提供的XML文档时:
<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>
<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>
89
福
78
苹果
10
生成所需的正确结果:
<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>
<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>
89
福
78
苹果
谢谢,这正是我需要的+1个好答案。您也可以使用