0

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

使用以下 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>
4

2 回答 2

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>
于 2013-09-12T12:57:02.053 回答
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)]"/>

您将 foo, bar,替换foobar为强制元素的名称。

于 2013-09-12T12:55:10.407 回答