XSL 1.0:跳过属性为空的元素的标识转换



我希望修改身份转换跳过元素,其中任何属性是空的,例如:复制<anyElement anyAttr1="a" anyAttr2="b"/>但不复制<anotherElement anotherAttr1="a" anotherAttr2=""/>

指出:

  1. 元素是否有子元素并不重要

  2. 没有任何属性的元素(容器元素)应该被复制

源示例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>仅处理其内容。当然,这些模板与恒等转换模板一起工作。

相关内容

  • 没有找到相关文章

最新更新