但是我们还要检查目标消息是否只包含(仅限),这些材料然后转换不应该删除这些材料。
目前,以下代码是查找和删除相关资料。请建议如何忽略此新要求的转换。
我在考虑选择 - > when->否则就是这种情况。
非常感谢提前。
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="E1EDP01[E1EDP19/IDTNR ='407303']"/>
<xsl:template match="E1EDP01[E1EDP19/IDTNR ='243']"/>
<xsl:template match="E1EDP01[E1EDP19/IDTNR ='262']"/>
<xsl:template match="E1EDP01[E1EDP19/IDTNR ='265']"/>
<xsl:template match="E1EDP01[E1EDP19/IDTNR ='5624']"/>
<xsl:template match="E1EDP01[E1EDP19/IDTNR ='145416']"/>
真诚的道歉: - 样本输入只有2个订单项,但仍应创建此输出。您可以多次复制E1EDP01位以满足其他IDTNR值。
谢谢吉姆。
<?xml version="1.0" encoding="UTF-8"?>
<ORDERS05><IDOC BEGIN="1">
<EDI_DC40 SEGMENT="1">
<TABNAM>EDI_DC40</TABNAM>
<DIRECT>2</DIRECT>
<IDOCTYP>ORDERS05</IDOCTYP>
<MESTYP>ORDERS</MESTYP>
<SNDPOR>SNDPOR</SNDPOR>
<SNDPRT>KU</SNDPRT>
<SNDPFC>AG</SNDPFC>
<SNDPRN>BWH</SNDPRN>
<RCVPOR>RCVPOR</RCVPOR>
<RCVPFC>LS</RCVPFC>
<RCVPRN>RCVPRN</RCVPRN>
</EDI_DC40>
<E1EDK01 SEGMENT="1">
<BSART>UB</BSART>
<BELNR>4505345253</BELNR>
</E1EDK01>
<E1EDKA1 SEGMENT="1">
<PARVW>AG</PARVW>
<LIFNR>B15</LIFNR>
<TELF1></TELF1>
<BNAME></BNAME>
</E1EDKA1>
<E1EDKA1 SEGMENT="1">
<PARVW>WE</PARVW>
<LIFNR>B15</LIFNR>
</E1EDKA1>
<E1EDKA1 SEGMENT="1">
<PARVW>LF</PARVW>
</E1EDKA1>
<E1EDK02 SEGMENT="1">
<QUALF>001</QUALF>
<BELNR>4505345253</BELNR>
<DATUM>20121102T00:00:00</DATUM>
<UZEIT>20121102T00:00:00</UZEIT>
</E1EDK02>
<E1EDP01 SEGMENT="1">
<POSEX>00001</POSEX>
<MENGE>1</MENGE>
<MENEE>EA</MENEE>
<VPREI>150.00</VPREI>
<NETWR></NETWR>
<CURCY>ZAR</CURCY>
<E1EDP19 SEGMENT="1">
<QUALF>001</QUALF>
<IDTNR>145416</IDTNR>
</E1EDP19>
<E1EDPT1 SEGMENT="1">
<TDID>ZERR</TDID>
<TSSPRAS_ISO>EN</TSSPRAS_ISO>
<E1EDPT2 SEGMENT="1">
<TDLINE>Description: GAS CYL DBL NOZZLE 48KG EM</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>UOM: EA</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Quantity: 1</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Unit Price: 150</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Customer Part Number: 145416</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2></E1EDPT1>
</E1EDP01>
<E1EDP01 SEGMENT="1">
<POSEX>00002</POSEX>
<MENGE>1</MENGE>
<MENEE>EA</MENEE>
<VPREI>150.00</VPREI>
<NETWR></NETWR>
<CURCY>ZAR</CURCY>
<E1EDP19 SEGMENT="1">
<QUALF>001</QUALF>
<IDTNR>407303</IDTNR>
</E1EDP19>
<E1EDPT1 SEGMENT="1">
<TDID>ZERR</TDID>
<TSSPRAS_ISO>EN</TSSPRAS_ISO>
<E1EDPT2 SEGMENT="1">
<TDLINE>Description: GAS CYL DBL NOZZLE 48KG EM</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>UOM: EA</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Quantity: 1</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Unit Price: 150</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Customer Part Number: 407303</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2></E1EDPT1>
</E1EDP01>
<E1EDS01 SEGMENT="1">
<SUMID>001</SUMID>
<SUMME>1</SUMME>
</E1EDS01>
<E1EDS01 SEGMENT="1">
<SUMME>150.00</SUMME>
<WAERQ>ZAR</WAERQ>
</E1EDS01>
</IDOC>
此示例将删除第二行,因为它包含一个不被xslt删除的项目。它应该只处理第一行。
<?xml version="1.0" encoding="UTF-8"?>
<ORDERS05>
<IDOC BEGIN="1">
<EDI_DC40 SEGMENT="1">
<TABNAM>EDI_DC40</TABNAM>
<DIRECT>2</DIRECT>
<IDOCTYP>ORDERS05</IDOCTYP>
<MESTYP>ORDERS</MESTYP>
<SNDPOR>SNDPOR</SNDPOR>
<SNDPRT>KU</SNDPRT>
<SNDPFC>AG</SNDPFC>
<SNDPRN>BWH</SNDPRN>
<RCVPOR>RCVPOR</RCVPOR>
<RCVPFC>LS</RCVPFC>
<RCVPRN>RCVPRN</RCVPRN>
</EDI_DC40>
<E1EDK01 SEGMENT="1">
<BSART>UB</BSART>
<BELNR>4504836702</BELNR>
</E1EDK01>
<E1EDKA1 SEGMENT="1">
<PARVW>AG</PARVW>
<LIFNR>1001600-S78</LIFNR>
<TELF1></TELF1>
<BNAME></BNAME>
</E1EDKA1>
<E1EDKA1 SEGMENT="1">
<PARVW>WE</PARVW>
<LIFNR>1001600-S78</LIFNR>
</E1EDKA1>
<E1EDKA1 SEGMENT="1">
<PARVW>LF</PARVW>
</E1EDKA1>
<E1EDK02 SEGMENT="1">
<QUALF>001</QUALF>
<BELNR>4504836702</BELNR>
<DATUM>20120423T00:00:00</DATUM>
<UZEIT>20120423T00:00:00</UZEIT>
</E1EDK02>
<E1EDP01 SEGMENT="1">
<POSEX>00001</POSEX>
<MENGE>100</MENGE>
<MENEE>EA</MENEE>
<VPREI>156.18</VPREI>
<NETWR></NETWR>
<CURCY>ZAR</CURCY>
<E1EDP19 SEGMENT="1">
<QUALF>001</QUALF>
<IDTNR>10220</IDTNR>
</E1EDP19>
<E1EDPT1 SEGMENT="1">
<TDID>ZERR</TDID>
<TSSPRAS_ISO>EN</TSSPRAS_ISO>
<E1EDPT2 SEGMENT="1">
<TDLINE>Description: GAS 9KG</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>UOM: EA</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Quantity: 100</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Unit Price: 156.18</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Customer Part Number: 10220</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
</E1EDPT1>
</E1EDP01>
<E1EDP01 SEGMENT="1">
<POSEX>00002</POSEX>
<MENGE>1</MENGE>
<MENEE>EA</MENEE>
<VPREI>150.00</VPREI>
<NETWR></NETWR>
<CURCY>ZAR</CURCY>
<E1EDP19 SEGMENT="1">
<QUALF>001</QUALF>
<IDTNR>243</IDTNR>
</E1EDP19>
<E1EDPT1 SEGMENT="1">
<TDID>ZERR</TDID>
<TSSPRAS_ISO>EN</TSSPRAS_ISO>
<E1EDPT2 SEGMENT="1">
<TDLINE>Description: GAS EMPTY 9 KG</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>UOM: EA</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Quantity: 1</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Unit Price: 150</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
<E1EDPT2 SEGMENT="1">
<TDLINE>Customer Part Number: 243</TDLINE>
<TDFORMAT>*</TDFORMAT>
</E1EDPT2>
</E1EDPT1>
</E1EDP01>
<E1EDS01 SEGMENT="1">
<SUMID>001</SUMID>
<SUMME>2</SUMME>
</E1EDS01>
<E1EDS01 SEGMENT="1">
<SUMME>30618.00</SUMME>
<WAERQ>ZAR</WAERQ>
</E1EDS01>
</IDOC>
</ORDERS05>
答案 0 :(得分:0)
你可以通过双重否定来实现你的结果(你想直接复制根只有你的材料列表中没有的元素)。
这里有一个示例转换。
BTW:我使用了“map”变量来简化验证,就像this帖子中建议的那样。如果你正在使用XSLT 2.0,你可以在同一篇文章中更多地简化它(直接使用变量,而不是使用document(''))。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mat="materials" exclude-result-prefixes="mat">
<xsl:output method="xml" indent="yes"/>
<mat:materials>
<IDTNR>407303</IDTNR>
<IDTNR>243</IDTNR>
<IDTNR>262</IDTNR>
<IDTNR>265</IDTNR>
<IDTNR>5624</IDTNR>
<IDTNR>145416</IDTNR>
</mat:materials>
<xsl:variable name="materials" select="document('')/*/mat:materials/IDTNR"/>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<xsl:template match="node()">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<xsl:template match="E1EDP01[E1EDP19/IDTNR = $materials]"/>
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<xsl:template match="ORDERS05[not(IDOC/E1EDP01/E1EDP19[not(IDTNR=$materials)])]">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
我希望这有帮助!
卡尔斯