1

在我的示例 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 />
4

1 回答 1

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 中的属性。

于 2012-08-22T09:22:15.697 回答