XSLT(V 1.0)排除节点

时间:2015-04-16 10:28:49

标签: xslt-1.0

我有一个SAP IDoc,如果存在ZGERZFER,我想删除一个节点,然后删除ZFER的父节点。

源XML:

<E1WPA04 SEGMENT="1">
    <KONDART>ZGER</KONDART>
    <BEGINNZEIT>0000</BEGINNZEIT>
    <ENDDATUM>99991231</ENDDATUM>
    <ENDZEIT>0000</ENDZEIT>
</E1WPA04>

<E1WPA04 SEGMENT="1">
    <KONDART>ZFER</KONDART>
    <BEGINNZEIT>0000</BEGINNZEIT>
    <ENDDATUM>99991231</ENDDATUM>
    <ENDZEIT>0000</ENDZEIT>
</E1WPA04>
<E1WPA04 SEGMENT="1">
    <KONDART>ZFAD</KONDART>
    <BEGINNZEIT>0000</BEGINNZEIT>
    <ENDDATUM>99991231</ENDDATUM>
    <ENDZEIT>0000</ENDZEIT>
</E1WPA04>

<E1WPA04 SEGMENT="1">
    <KONDART>ZCDC</KONDART>
    <BEGINNZEIT>0000</BEGINNZEIT>
    <ENDDATUM>99991231</ENDDATUM>
    <ENDZEIT>0000</ENDZEIT>
</E1WPA04>

此处仅显示值ZGERZFER

目标:

<E1WPA04 SEGMENT="1">
    <KONDART>ZGER</KONDART>
    <BEGINNZEIT>0000</BEGINNZEIT>
    <ENDDATUM>99991231</ENDDATUM>
    <ENDZEIT>0000</ENDZEIT>
</E1WPA04>  
<E1WPA04 SEGMENT="1">
    <KONDART>ZFAD</KONDART>
    <BEGINNZEIT>0000</BEGINNZEIT>
    <ENDDATUM>99991231</ENDDATUM>
    <ENDZEIT>0000</ENDZEIT>
</E1WPA04>
<E1WPA04 SEGMENT="1">
    <KONDART>ZCDC</KONDART>
    <BEGINNZEIT>0000</BEGINNZEIT>
    <ENDDATUM>99991231</ENDDATUM>
    <ENDZEIT>0000</ENDZEIT>
</E1WPA04>

1 个答案:

答案 0 :(得分:1)

如果您使用的是基于有选择地覆盖身份转换的典型模式,那么问题归结为如何识别要删除的项目。听起来你想删除任何同时具有

E1WPA04元素
  • KONDART
  • 的孩子ZFER
  • 有孩子E1WPA04并且价值为KONDART
  • 的同级ZGER

这对应于

<xsl:template match="E1WPA04[KONDART='ZFER'][../E1WPA04/KONDART='ZGER']"/>

如果文档中有 ZGER,则此模板将不匹配(因此不会删除ZFER)。