Cosminexus V9 BPM/ESB基盤 サービスプラットフォーム 開発ガイド 基本開発編
XPathファンクションとくり返しファンクションを組み合わせて使用する方法を説明します。
くり返しファンクションによって処理されるノードをXPathファンクションで指定する場合は,相対ロケーションパスで指定します。
くり返しファンクションの基準パスが単純型ノードである場合,その単純型ノードの相対ロケーションパスは”.”になります。”.”は自分自身のノードを表します。”self::node()”と同義です。
次に指定例を示します。
図6-105 くり返しの基準パスが単純型ノードの場合の例
上記の例では,”.”がくり返しファンクションで処理されるvalue1つを表現しています。この場合,「/InputData/value」の値が1番目から順番に「/OutputData/result」へ代入されます。
くり返しファンクションの基準パスが複合型ノードである場合,その複合型ノードの相対ロケーションパスは”.”になります。複合型ノードの子ノードは,複合型ノードからの相対ロケーションパスで指定します。
次に指定例を示します。
図6-106 くり返しの基準パスが複合型ノードの場合の例
上記の例では,くり返しファンクションの範囲内にあるdataの子ノードvalueを相対ロケーションパス”./value”で指定しています。この場合,「/InputDataList/data/value」の値が1番目から順番に「/OutputDataList/data/result」へ代入されます。
絶対ロケーションパスで指定した場合は,くり返しファンクションと連動した値の代入が行われません。
次に指定例を示します。
図6-107 絶対ロケーションパスで指定した場合の例
上記の例では,くり返しファンクションの範囲内にあるdataの子ノードvalueを絶対ロケーションパスで指定しているため,「/InputDataList/data/value」の1番目の値がくり返し代入されます。
XPathファンクションとくり返しファンクションの連携例を次に示します。
XPathのposition関数を使用することでくり返しファンクションで処理されるノードの出現位置を代入することができます。
次に指定例を示します。
図6-108 XPathのposition関数を指定する例
上記の例では,くり返しファンクションで処理される「/InputData/value」の出現位置(”1”,”2”,…)が「/OutputData/data/position」へ代入されます。
XPathのlast関数を使用することでノード数(くり返し回数)を代入することができます。
次に指定例を示します。
図6-109 XPathのlast関数を指定する例
上記の例では,くり返しファンクションで処理される「/InputData/value」のノード数が「/OutputData/data/count」へ代入されます。下記の入力データでは,”3”が代入されます。
上記の例において,last関数と同様の機能であるノード数取得ファンクションを使用した場合は,くり返しファンクションで処理される「/InputData/value」の一つ一つに対してノード数取得処理が実行されます。そのため,常に”1”が代入されます。
次に使用例を示します。
図6-110 ノード数取得ファンクションを使用する例
くり返しファンクションの範囲外にあるノードについて,相対ロケーションパスを使用することでくり返し処理と連動したノード値を代入することができます。
次に指定例を示します。
くり返し範囲外のノード値を代入する例
上記の例では,くり返しファンクションの範囲外にあるidを基準パスであるdataから相対ロケーションパス(”../id”)で指定しています。この場合,「/InputData/dataList/data」に対応した「/InputData/dataList/id」の値が変換先へ代入されます。
絶対ロケーションパスで指定した場合やマッピング線で代入した場合は,くり返し処理と連動しないため,「/InputData/dataList/id」の1番目の値が変換先へ代入されます。
くり返しファンクションのノード条件にXPathファンクションを指定することで,任意のXPath式でくり返し処理を制御することができます。
次に指定例を示します。
くり返し条件をXPath式で指定する例
上記の例では,くり返しファンクションのノード条件にnot関数,およびpreceding※を使用することで,「/InputDataList/data/value」の中で重複している値は代入しないように制御しています。
All Rights Reserved. Copyright (C) 2012, 2019, Hitachi, Ltd.