在我的示例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 />
答案 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中的属性。
祝你好运, 彼得