我面临以下问题:
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>