XSL转换 - 删除特定元素的空元素

时间:2016-09-14 18:20:27

标签: xslt xslt-1.0

我编写了一个XSL代码,用于删除任何xml文件中没有任何属性的空元素。如果空元素具有属性,我不想删除该元素。 例如:<ABC xyz="true"/>这是一个空元素,但有属性,所以我不会删除这个元素。 但是,仅针对特定元素MNO, 例如:<ABC><MNO def="hello"></ABC>,我想删除此元素MNO。请帮忙

下面分享了XSL代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" >
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
    <xsl:template match="node() | @*">
    <xsl:copy>
    <xsl:apply-templates select="node() | @* "/>
    </xsl:copy>
</xsl:template>
    <xsl:template match="*[not(.//@*) and not( normalize-space() )]" />
    <xsl:template match="*/text()[not(normalize-space())]" />
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您只需将此其他模板添加到XSLT

即可
<xsl:template match="MNO[not( normalize-space() )]" priority="2" />

需要priority,因为两个模板匹配具有相同优先级的相同内容被视为错误。