0
所需的元素,我有以下XML刪除空節點,保持人口節點
<exx:XItemLocDesc xmlns:exx="http://www.oracle.com/retail/integration/base/bo/XItemLocDesc/v1">
<exx:XItemLocDtl>
<exx:hier_value/>
<exx:primary_supp>XXX</exx:primary_supp>
<exx:primary_cntry>XXX</exx:primary_cntry>
<exx:status>XXX</exx:status>
<exx:store_ord_mult>XXXX</exx:store_ord_mult>
<exx:receive_as_type/>
<exx:taxable_ind/>
<exx:ext_uin_ind>XXX</exx:ext_uin_ind>
<exx:source_method>XXX</exx:source_method>
<exx:source_wh>XXX</exx:source_wh>
</exx:XItemLocDtl>
<exx:XItemLocDtl>
<exx:hier_value/>
<exx:primary_supp/>
<exx:primary_cntry/>
<exx:status/>
<exx:store_ord_mult/>
<exx:receive_as_type/>
<exx:taxable_ind/>
</exx:XItemLocDtl>
<exx:XItemLocDtl>
<exx:hier_value/>
<exx:primary_supp/>
<exx:primary_cntry/>
<exx:status/>
<exx:store_ord_mult/>
<exx:receive_as_type/>
<exx:taxable_ind/>
</exx:XItemLocDtl>
</exx:XItemLocDesc>
我希望做一個通用的解決方案,以刪除空目錄,但保留「的minOccurs = 1」的元素..
請注意,這些元素是必需的。
<exx:hier_value/>
<exx:primary_supp/>
<exx:primary_cntry/>
<exx:status/>
<exx:store_ord_mult/>
<exx:receive_as_type/>
<exx:taxable_ind/>
如果我用下面的XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="node()">
<xsl:if test="normalize-space(string(.)) != ''
or count(@*[normalize-space(string(.)) != '']) > 0
or count(descendant::*[normalize-space(string(.)) != '']) > 0
or count(descendant::*/@*[normalize-space(string(.)) != '']) > 0">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:if>
</xsl:template>
<xsl:template match="@*">
<xsl:if test="normalize-space(string(.)) != ''">
<xsl:copy>
<xsl:apply-templates select="@*" />
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
我的結果是
<exx:XItemLocDesc xmlns:exx="http://www.oracle.com/retail/integration/base/bo/XItemLocDesc/v1">
<exx:XItemLocDtl>
<exx:primary_supp>XXX</exx:primary_supp>
<exx:primary_cntry>XXX</exx:primary_cntry>
<exx:status>XXX</exx:status>
<exx:store_ord_mult>XXXX</exx:store_ord_mult>
<exx:ext_uin_ind>XXX</exx:ext_uin_ind>
<exx:source_method>XXX</exx:source_method>
<exx:source_wh>XXX</exx:source_wh>
</exx:XItemLocDtl>
</exx:XItemLocDesc>
,我希望保持必填字段上包含內容的節點..
像這個:
<exx:XItemLocDesc xmlns:exx="http://www.oracle.com/retail/integration/base/bo/XItemLocDesc/v1">
<exx:XItemLocDtl>
<exx:hier_value/>
<exx:primary_supp>XXX</exx:primary_supp>
<exx:primary_cntry>XXX</exx:primary_cntry>
<exx:status>XXX</exx:status>
<exx:store_ord_mult>XXXX</exx:store_ord_mult>
<exx:receive_as_type/>
<exx:taxable_ind/>
<exx:ext_uin_ind>XXX</exx:ext_uin_ind>
<exx:source_method>XXX</exx:source_method>
<exx:source_wh>XXX</exx:source_wh>
</exx:XItemLocDtl>
</exx:XItemLocDesc>
我需要刪除空節點,但保留具有某些內容的節點上的必填字段。 – Stack
@Stack我不確定你想說什麼。讓我指出,「空節點」可以用許多不同的方式來解釋。我不打算進入這一點。我的答案僅僅是爲了展示如果節點在「需要」列表中,即使它是「空的」,如何保留該節點。 –