XSLT:如何从输出中只排除几个空标签?

时间:2013-09-12 12:51:50

标签: xslt

我需要确保从输出中排除空标记(必填字段除外)。必填字段应该在输出中,即使它们是空的

使用以下xslt,我可以排除空标签。但即使是必填字段,如果它们是空的,也会从输出中删除。请指教。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>

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

 <xsl:template match= "*[not(@*|*|comment()|processing-instruction()) and     
 normalizespace()='']"/>
 </xsl:stylesheet>

2 个答案:

答案 0 :(得分:1)

更改

 <xsl:template match= "*[not(@*|*|comment()|processing-instruction()) and     
 normalizespace()='']"/>

 <xsl:template match= "*[not(@*|*|comment()|processing-instruction()) and     
 normalizespace()='' and not(self::foo | self::bar | self::foobar)]"/>

您可以使用必填元素的名称替换foobarfoobar

答案 1 :(得分:1)

我认为你最终只能命名要删除的元素:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes" method="xml"/>
    <xsl:strip-space elements="*"/>

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

    <!-- Remove the following elements -->
    <xsl:template match="element1 | element2 | element3"/>
</xsl:stylesheet>