我需要确保从输出中排除空标记(必填字段除外)。必填字段应该在输出中,即使它们是空的
使用以下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>
答案 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)]"/>
您可以使用必填元素的名称替换foo
,bar
,foobar
。
答案 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>