删除空节点

时间:2015-09-15 13:37:08

标签: xml xslt

我尝试删除空节点,但不是全部删除,例如我有标签:

1.<abc></abc> - it should be delete
2.<cde/> - it should not be delete.
3.<fgh/> - it SHOULD be delete.

所以,我想删除第2点中的空节点(显式名称“CDE”)

换句话说:当'cde'和tag之类的标签为null时,删除。 :D

有可能吗?

我找到了删除所有空节点的代码:

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="*[descendant::text() or descendant-or-self::*/@*[string()]]">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="@*[string()]">
    <xsl:copy/>
</xsl:template>

</xsl:stylesheet>

编辑:

XML看起来像:

<system/>
            <smth></smth>
            <smth2>?</smth2>
            <smth3>?</smth3>
            <smth4></smth4>
            <smth4></smth4>
            <smth5/>

XML可以包含很多标签,例如 - 我已经动态删除了它们。 一些看起来像我想删除的标签。但是在这个XML中应该留下来。

因此XML输出应该是:

 <system/>
                <smth2>?</smth2>
                <smth3>?</smth3>




I found the solution: http://xsltransform.net/nc4NzRx/3. : )

1 个答案:

答案 0 :(得分:0)

如果要删除所有内容但删除空的cde元素,请使用带有以下两个模板的样式表

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

<xsl:template match="cde[not(node())]"/>