【发布时间】:2016-06-13 18:39:15
【问题描述】:
我的输入 XML 如下,
<OUTPUT-AREA><TIME-CD>A</TIME-CD>
<ID-G>
<Table-ID-T>
<AT-ID-T>YYYX</AT-ID-T>
<AT-ID-T/>
<AT-ID-T/>
</Table-ID-T>
</ID-G>
</OUTPUT-AREA>
我的输出 XML 应该是这样的,
<OUTPUT-AREA>
<TIME-CD>A</TIME-CD>
<ID-G>
<Table-ID-T>
<AT-ID-T>YYYX</AT-ID-T>
</Table-ID-T>
</ID-G>
</OUTPUT-AREA>
我只想删除具有空值的子元素。在上面的示例中,我只想删除具有空值的 <AT-ID-T> 元素。
但不应删除 Table-ID-T 或 ID-G。
这里的一个挑战是,假设如果所有子元素都有空值,那么至少一个子元素应该 留在表格或数组中。
例如输入的XML是
<OUTPUT-AREA>
<TIME-CD>A</TIME-CD>
<ID-G>
<Table-ID-T>
<AT-ID-T/>
<AT-ID-T/>
<AT-ID-T/>
</Table-ID-T>
</ID-G>
</OUTPUT-AREA>
那么输出应该是这样的,
<OUTPUT-AREA>
<TIME-CD>A</TIME-CD>
<ID-G>
<Table-ID-T>
<AT-ID-T/>
</Table-ID-T>
</ID-G>
</OUTPUT-AREA>
请为我提供一个符合要求的合适 XSLT。
请在下面找到我尝试过的 XSLT,
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://ACORD.org/Standards/Life/2">
<xsl:output encoding="UTF-8" indent="no" omit-xml-declaration="no"/>
<xsl:template match="/">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="*">
<xsl:if test=".!=''">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:if>
</xsl:template>
在应用上述 XSLT 时,删除所有具有空值的元素。但我只需要删除子元素。
【问题讨论】:
-
SO 不是代码编写服务。我们很乐意帮助您解决您遇到的任何问题,但您必须向我们展示您迄今为止所做的尝试。
-
@Matthew 对不起,我同意。我没有附加我在最初的帖子中尝试过的 XSLT。我现在已经用我的 XSLT 更新了这篇文章。请查看
标签: xml xslt xml-parsing xslt-1.0 xslt-3.0