我编写了一个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>
答案 0 :(得分:1)
如果我理解正确,您只需将此其他模板添加到XSLT
即可<xsl:template match="MNO[not( normalize-space() )]" priority="2" />
需要priority
,因为两个模板匹配具有相同优先级的相同内容被视为错误。