2017-11-02 7 views
0

私のXSLT変換では別の問題について助けが必要です。XSLT変換 - 反復構造の結果として、値の集計になる

入力ファイルに異なる値を持つ繰り返し構造があります。

   <Dbtr> 
        <Nm>TEST BANK GMBH</Nm> 
       </Dbtr> 
       <DbtrAcct> 
        <Id> 
         <IBAN>DE07702203005401252462</IBAN> 
        </Id> 
       </DbtrAcct> 
       <DbtrAgt> 
        <FinInstnId> 
         <BIC>TESTBDEM0XXX</BIC> 
        </FinInstnId> 
       </DbtrAgt> 
       <CdtrAgt> 
        <FinInstnId> 
         <BIC>HYVEDEMM475</BIC> 
        </FinInstnId> 
       </CdtrAgt> 
       <Cdtr> 
        <Nm>Name 1</Nm> 
       </Cdtr> 
       <CdtrAcct> 
        <Id> 
         <IBAN>DE92660202860002099551</IBAN> 
        </Id> 
       </CdtrAcct> 
       <Dbtr> 
        <Nm>Name 2</Nm> 
       </Dbtr> 
       <DbtrAcct> 
        <Id> 
         <IBAN>DE88702203005002522901</IBAN> 
        </Id> 
       </DbtrAcct> 
       <DbtrAgt> 
        <FinInstnId> 
         <BIC>TESTBDEM0XXX</BIC> 
        </FinInstnId> 
       </DbtrAgt> 
       <CdtrAgt> 
        <FinInstnId> 
         <BIC>HYVEDEMMXXX</BIC> 
        </FinInstnId> 
       </CdtrAgt> 
       <Cdtr> 
        <Nm>FIRMA X</Nm> 
       </Cdtr> 
       <CdtrAcct> 
        <Id> 
         <IBAN>DE39700202704320253727</IBAN> 
        </Id> 
       </CdtrAcct> 

これはXSLT-ファイルの一部です:

     <OrgnlTxRef> 
          <xsl:if test="position()=1"> 
           <IntrBkSttlmAmt Ccy="EUR"> 
             <xsl:value-of select="$_find_amount"/> 
           </IntrBkSttlmAmt> 
           <IntrBkSttlmDt> 
            <xsl:for-each select="//myTxNS:TxInfAndSts/myTxNS:OrgnlTxRef/myTxNS:IntrBkSttlmDt[not(.=preceding::*)]"> 
             <xsl:value-of select="."/> 
            </xsl:for-each> 
           </IntrBkSttlmDt> 
           <DbtrAgt> 
            <FinInstnId> 
             <BIC>TESTBDEM0XXX</BIC> 
            </FinInstnId> 
           </DbtrAgt> 
           <CdtrAgt> 
            <FinInstnId> 
             <BIC> 
             <xsl:for-each select="//myTxNS:TxInfAndSts/myTxNS:OrgnlTxRef/myTxNS:CdtrAgt/myTxNS:FinInstnId/myTxNS:BIC"> 
              <xsl:value-of select="."/> 
             </xsl:for-each> 
             </BIC> 
            </FinInstnId> 
           </CdtrAgt> 
          </xsl:if> 
          <xsl:if test="position()=2"> 
           <IntrBkSttlmAmt Ccy="EUR"> 
             <xsl:value-of select="$_find_amount2"/> 
           </IntrBkSttlmAmt> 
           <IntrBkSttlmDt> 
            <xsl:for-each select="//myTxNS:TxInfAndSts/myTxNS:OrgnlTxRef/myTxNS:IntrBkSttlmDt[not(.=preceding::*)]"> 
             <xsl:value-of select="."/> 
            </xsl:for-each> 
           </IntrBkSttlmDt> 
           <DbtrAgt> 
            <FinInstnId> 
             <BIC>TESTBDEM0XXX</BIC> 
            </FinInstnId> 
           </DbtrAgt> 
           <CdtrAgt> 
            <FinInstnId> 
             <BIC> 
             <xsl:for-each select="//myTxNS:TxInfAndSts/myTxNS:OrgnlTxRef/myTxNS:CdtrAgt/myTxNS:FinInstnId/myTxNS:BIC"> 
              <xsl:value-of select="."/> 
             </xsl:for-each> 
             </BIC> 
            </FinInstnId> 
           </CdtrAgt> 
          </xsl:if> 
         </OrgnlTxRef> 

私の実際の結果は以下のとおりであった:

  <OrgnlTxRef> 
      <IntrBkSttlmAmt Ccy="EUR">8.28</IntrBkSttlmAmt> 
      <IntrBkSttlmDt>2017-10-26</IntrBkSttlmDt> 
      <DbtrAgt> 
       <FinInstnId> 
        <BIC>TESTBDEM0XXX</BIC> 
       </FinInstnId> 
      </DbtrAgt> 
      <CdtrAgt> 
       <FinInstnId> 
        <BIC>HYVEDEMM475HYVEDEMMXXX</BIC> 
       </FinInstnId> 
      </CdtrAgt> 

      <DbtrAgt> 
       <FinInstnId> 
        <BIC>TESTBDEM0XXX</BIC> 
       </FinInstnId> 
      </DbtrAgt> 
      <CdtrAgt> 
       <FinInstnId> 
        <BIC>HYVEDEMM475HYVEDEMMXXX</BIC> 
       </FinInstnId> 
      </CdtrAgt> 
     </OrgnlTxRef> 
     </TxInfAndSts> 
    </nsC:FIToFIPmtStsRptSCL> 
</nsC:BBkRSFBlkDirDeb> 

私はこれを回避するために何か必要があります。

  <FinInstnId> 
       <BIC>HYVEDEMM475HYVEDEMMXXX</BIC> 
      </FinInstnId> 

を次のような明確な結果が得られます。

... 
      <FinInstnId> 
       <BIC>HYVEDEMMXXX</BIC> 
      </FinInstnId> 
... 
... 
      <FinInstnId> 
       <BIC>HYVEDEMM475</BIC> 
      </FinInstnId> 
... 

私はこのページを検索し、その問題を解決するためのさまざまな「アイデア」を試してみます。しかし、私は常に出力ファイルの結合された値と同じ結果になります。

+0

問題の特定の問題を示すために最小限のサンプルを投稿することを考慮すると、コードまたはアプローチを修正する必要がある場所を示すためにあまりにも多くのデータがあります。 –

+0

ありがとうございます。私はそれを関連するコンテンツにスナップします。 –

答えて

0

問題は、これらの線まず

<BIC> 
    <xsl:for-each select="//myTxNS:TxInfAndSts/myTxNS:OrgnlTxRef/myTxNS:CdtrAgt/myTxNS:FinInstnId/myTxNS:BIC"> 
     <xsl:value-of select="."/> 
    </xsl:for-each> 
</BIC> 

であるあなたが//との表現を起動したときに、これは、文書ノードの検索を開始し、任意の場所にXMLの要素を探します。あなたが望んでいるのは、あなたが現在いるノードに対する相対的な要素だけを選択することです。

あなたはXSLTをあまりにも多くカットしてしまったと思いますが、このコードが実行される時点では、myTxNS:TxInfAndSts要素に配置されていると思います。

<xsl:for-each select="myTxNS:OrgnlTxRef/myTxNS:CdtrAgt/myTxNS:FinInstnId/myTxNS:BIC"> 

はまた、あなたはおそらくxsl:for-each内部<BIC>タグの作成を移動したいです。

<xsl:for-each select="myTxNS:OrgnlTxRef/myTxNS:CdtrAgt/myTxNS:FinInstnId/myTxNS:BIC"> 
    <BIC> 
     <xsl:value-of select="."/> 
    </BIC> 
</xsl:for-each> 
+0

ありがとうございました...それは完璧に動作します。 ミュンヘン/ドイツの近くにいる場合、私はあなたに1つ以上のビールを立てています;) –

関連する問題