getVariableDataの結果の末尾へのXPathの適用
次の例に示す動的索引付けメソッドでは、XPathをbpws:getVariableData()
の最後の引数として使用するのではなく、bwps:getVariableData()
の結果の末尾にXPathを適用します。末尾のXPathは、位置述語内の整数型の索引変数(つまり、[...]
)を参照します。
<variable name="idx" type="xsd:integer"/> ... <assign> <copy> <from expression="bpws:getVariableData('input','payload' )/p:line-item[bpws:getVariableData('idx')]/p:line-total" /> <to variable="lineTotalVar" /> </copy> </assign>
実行時に、idx
整数変数の値として2
が格納されるとします。前述の例のfrom
内の式は、次の例の式と同等です。
<from expression="bpws:getVariableData('input','payload' )/p:line-item[2]/p:line-total" />
XPathがbwps:getVariableData()
関数の末尾に使用される場合とこの関数内で使用される場合では、XPathの使用方法に多少の違いがあります。同じ例(payload
が要素p:invoice
のメッセージ・パートである例)を使用すると、XPathをgetVariableData()
関数内で使用する場合は、ルート要素名(/p:invoice
)をXPathの先頭に指定する必要があります。
次の例に詳細を示します。
bpws:getVariableData('input', 'payload','/p:invoice/p:line-item[2]/p:line-total')
XPathをbwps:getVariableData()
関数の末尾に使用する場合、ルート要素名をXPath内に指定する必要はありません。
例:
bpws:getVariableData('input', 'payload')/p:line-item[2]/p:line-total
これは、getVariableData()
関数で返されるノードがルート要素であるためです。ルート要素名をXPathで再指定すると重複になり、XPathの標準セマンティクスでは不正となります。