我希望修改身份转换跳过元素,其中任何属性是空的,例如:复制<anyElement anyAttr1="a" anyAttr2="b"/>
但不复制<anotherElement anotherAttr1="a" anotherAttr2=""/>
指出:
-
元素是否有子元素并不重要
-
没有任何属性的元素(容器元素)应该被复制
源示例XML:
<?xml version="1.0" encoding="utf-8"?>
<Parameterset>
<Type Code=""/>
<Inventory Code="250" Index="0"/>
<Inventory Code="350" Index=""/>
</Parameterset>
转换后的示例XML:
<?xml version="1.0" encoding="utf-8"?>
<Parameterset>
<Inventory Code="250" Index="0"/>
</Parameterset>
我能想到的只有:
<xsl:template match="node()|@*[. != '']">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
,但这只是删除空属性,仍然复制元素
使用<xsl:template match="*[@*[. = '']]"/>
删除这些元素或使用<xsl:template match="*[@*[. = '']]"><xsl:apply-templates></xsl:template>
仅处理其内容。当然,这些模板与恒等转换模板一起工作。