XSLT - 删除nil = true&空元素

时间:2017-03-15 04:10:56

标签: java xml xslt

我使用下面的xslt来删除命名空间。有没有办法修改它以删除带有nil =“true”和空标签的元素(例如:<data/>)?

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" />

    <xsl:strip-space elements="*"/>
    <xsl:template match="*">
        <xsl:element name="{local-name(.)}">
            <xsl:apply-templates select="@* | node()" />
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:attribute name="{local-name(.)}">
      <xsl:value-of select="." />
    </xsl:attribute>
    </xsl:template>


</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

这似乎有效,但请建议是否有更有效的方法 -

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xsl:output method="xml" indent="yes" />

    <xsl:strip-space elements="*" />


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

    <!-- TEMPLATE #2 -->
    <xsl:template match="*[@xsi:nil = 'true']" />

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

    <xsl:template match="*">
        <xsl:element name="{local-name(.)}">
            <xsl:apply-templates select="@* | node()" />
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:attribute name="{local-name(.)}">
      <xsl:value-of select="." />
    </xsl:attribute>
    </xsl:template>



</xsl:stylesheet>