排除空元素

时间:2012-08-22 08:25:09

标签: xslt xslt-2.0

在我的示例xml文件中,我有这个:

<AAA mandatory = "true"> good </AAA>
<BBB mandatory = "true"></BBB>
<CCC />

在生成的xml中,结果应如下所示:

<AAA> good </AAA>
<BBB></BBB>

我应该在转换文件xslt中放入什么来生成这个xml?

目前,我有这个:

<xsl:template match="node()[(@mandatory='true' or (following-sibling::*[@mandatory='true' and string-length(normalize-space(.)) > 0] or preceding-sibling::*[@mandatory='true' and string-length(normalize-space(.)) > 0])) or descendant-or-self::*[string-length(normalize-space(.)) > 0]]">

但这会继续显示

 <CCC />

1 个答案:

答案 0 :(得分:0)

当我在输入XML上运行XSLT时,我没有得到任何输出。 你提供的XML格式不正确,我认为你的“匹配”中的XPATH太复杂了。

我想出了一个XSL 1.0解决方案,但我不知道你是否可以在XSL 2.0中使用它。我没有XSL 2.0的经验。

这个XSLT:

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

<xsl:template match="/">
    <list>
        <xsl:apply-templates/>
    </list>
</xsl:template>

<xsl:template match="*[@mandatory='true']">
    <xsl:copy>
        <xsl:apply-templates />
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

应用于此输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<list>
<AAA mandatory="true"> good </AAA>
<BBB mandatory="true"/>
<CCC/>
</list>

给出了这个输出XML:

<?xml version="1.0" encoding="UTF-8"?>
<list>
<AAA> good </AAA>
<BBB/>
</list>

我希望这会有所帮助。我不确定您是否还要检查元素的文本长度或仅检查属性是否必需。我只检查我的XSL中的属性。

祝你好运, 彼得