0

こんばんは専門家。私の要件は次のとおりです。渡してはいけない資料に基づいて、ターゲットメッセージを変換しています。ターゲットメッセージに特定の資料が含まれている場合、これらはターゲットから削除されます。

ただし、ターゲットメッセージにこれらのマテリアルのみが含まれているかどうかも確認する必要があります。その場合、変換によってこれらのマテリアルがまったく削除されないはずです。

現在、以下のコードは、問題の資料を見つけて削除するためのものです。この新しい要件の変換を無視する方法を提案してください。

選択->いつ->それ以外の場合を検討しています。

よろしくお願いします。

<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によっても削除されないアイテムが含まれているため、2行目を削除します。1行目のみを処理する必要があります。

   <?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>
4

1 に答える 1

0

二重否定によって結果を得ることができます(ルートを直接コピーしたいのは、マテリアルリストにない要素がないだけです)。

ここにサンプル変換があります。

ところで:この投稿で提案されているように、検証を簡素化するために「マップ」変数を使用しました。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>

これが役立つことを願っています!

カルレス

于 2012-11-06T15:57:52.110 に答える