XSLT:根据元素值删除一个节点的XML并删除另一个节点中的元素



我面临以下问题:

XML输入为:

<root>
<ITEM_DATA>
<DOC_NUMBER>0021182064</DOC_NUMBER>
<ITM_NUMBER>000010</ITM_NUMBER>
<ITEM_CATEG>ZBOM</ITEM_CATEG>
<HG_LV_ITEM>000000</HG_LV_ITEM>
</ITEM_DATA>                
<ITEM_DATA>
<DOC_NUMBER>0021182064</DOC_NUMBER>
<ITM_NUMBER>000020</ITM_NUMBER>
<ITEM_CATEG>ZAN</ITEM_CATEG>
<REL_FOR_BI>A</REL_FOR_BI>
<HG_LV_ITEM>000010</HG_LV_ITEM>
<ALTERN_ITM>000000</ALTERN_ITM>
</ITEM_DATA>
<ITEM_DATA>
<DOC_NUMBER>0021182064</DOC_NUMBER>
<ITM_NUMBER>000030</ITM_NUMBER>
<ITEM_CATEG>ZAN</ITEM_CATEG>
<REL_FOR_BI>A</REL_FOR_BI>
<HG_LV_ITEM>000010</HG_LV_ITEM>
<ALTERN_ITM>000000</ALTERN_ITM>
</ITEM_DATA>

<ITEM_DATA>
<DOC_NUMBER>0021182064</DOC_NUMBER>
<ITM_NUMBER>000040</ITM_NUMBER>
<ITEM_CATEG>ZTAT</ITEM_CATEG>
<REL_FOR_BI>A</REL_FOR_BI>
<ALTERN_ITM>000000</ALTERN_ITM>
</ITEM_DATA>        
</root>

我想删除XML节点";ITEM_ DATA";具有元件";ITEM_ CATEG";具有值ZBOM。为此,我应用了以下XSLT代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="ITEM_DATA[ITEM_CATEG = 'ZBOM']"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

这很管用。但我也想删除元素";项目HG_ LV_;在其值等于"0"的其它节点中;ITM_ NUMBER";值和";ITEM_CATEG"=ZBOM。

预期输出结果为:

<root>
<ITEM_DATA>
<DOC_NUMBER>0021182064</DOC_NUMBER>
<ITM_NUMBER>000020</ITM_NUMBER>
<ITEM_CATEG>ZAN</ITEM_CATEG>
<REL_FOR_BI>A</REL_FOR_BI>
<ALTERN_ITM>000000</ALTERN_ITM>
</ITEM_DATA>
<ITEM_DATA>
<DOC_NUMBER>0021182064</DOC_NUMBER>
<ITM_NUMBER>000030</ITM_NUMBER>
<ITEM_CATEG>ZAN</ITEM_CATEG>
<REL_FOR_BI>A</REL_FOR_BI>
<ALTERN_ITM>000000</ALTERN_ITM>
</ITEM_DATA>

<ITEM_DATA>
<DOC_NUMBER>0021182064</DOC_NUMBER>
<ITM_NUMBER>000040</ITM_NUMBER>
<ITEM_CATEG>ZTAT</ITEM_CATEG>
<REL_FOR_BI>A</REL_FOR_BI>
<ALTERN_ITM>000000</ALTERN_ITM>
</ITEM_DATA>        
</root>

你能分享一下你的建议吗?

提前谢谢。

请尝试以下XSLT。

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ITEM_DATA[ITEM_CATEG = 'ZBOM']"/>
<xsl:template match="HG_LV_ITEM[. = ../ITM_NUMBER][../ITEM_CATEG = 'ZBOM']"/>
</xsl:stylesheet>

最新更新