2017-11-22 14 views
0

私はXSLTの問題を解決するために専門知識が必要です。XSLT - 検索された値が複数回存在する場合 - 最初に戻る

私は、1つの(支払い)XMLフォーマットを別のフォーマットに変換/変換するための優れたXSLTを作成します。私はUIとしてExcelを使用しており、SaxonはExcelのUI入力とXSLTファイルの値を使ってファイルを変換しています。

(2)4つの検索条件があります。

  • (IBAN 1 &額1)
  • (IBAN 2 &額2)

すべてがポイントになるまで、正常に動作しています検索された値の1つが入力ファイルに複数回存在する場合

入力ファイル:www.gudrich.com/xslt/input.xml

XSLT-ファイル:http://www.gudrich.com/xslt/transform.xslt

は、この出力ファイルを作成するには、検索パラメータは以下のとおりです。

  • IBAN 1:DE02702203005005507393
  • 量1:19,00
  • IBAN 2:DE13702203005003963537
  • 金額2:804.07

出力ファイル:http://www.gudrich.com/xslt/output.xml

私は最初に見つかった結果が出力ファイルに転送され、第二は、無視されなければならないことを望みます。

実際には、両方の検出(IBAN)トランザクションが必要です。

私はXpathと[1]を使って提案を試してみます。 しかし、結果として、2つの検索パラメータの最初の要素のみが考慮されることになりました。

は& BRありがとう クリスチャン

+0

こんにちは!これは、XSLTを関連要素と必要要素に分けて、実際の例を提供するのに役立ちます。 '$ all_TxInf_Nodes'のような変数のためにあらかじめ定義された値を持ちます。さもなければ問題は不明瞭なままです。 –

+1

はい、あなたが主題を知らない場合、 'SCLSDD:BBkIDFBlkDirDeb'のような要素名を使用するデバッグコードは絶対的な悪夢です。私たちにfoo-bar簡略版をお願いします。そして私はあなたが達成したいことを正確に理解しているとはいえません。 –

答えて

0

をよりよく理解するために、このチュートリアルを見てとることができます。

<xsl:if test="(number($betrag)=number($_find_amount2) and $iban=$_find_iban2)"> 

の中$iban=$_find_iban2の最初の発生にこれを制限するにはXMLのようなものが必要です:

<xsl:if test="(number($betrag)=number($_find_amount2) and $iban=$_find_iban2) and not(preceding::myTxNS:OrgnlTxRef/myTxNS:DbtrAcct/myTxNS:Id/myTxNS:IBAN = $_find_iban2)"> 
+0

ありがとうございます: )それは完璧に動作します。 –

0

あなたは常にだけ追加し、XSLTとXPathを使用して最初のocurrenceを選択することができます "[1]" あなたのXPath式の終わりに。

あなたは一致してあなたのXMLで複数の項目があるように見えますhttps://www.w3schools.com/xml/xpath_syntax.asp

+0

ここで問題となるのは、最初に検索された値だけが出力ファイルにあることです。 2番目の検索値は無視されます:( –

+0

変数 "iban"に何を保存したいか分かりません。コードに対処するには、2つの変数を定義することがあります。および別の変数'。xsltの重複する要素を削除/無視する方法を検索することをお勧めします。 – Carlos

関連する問題