XPathStringコンポーネントなどXMLコンポーネントの「XPath」プロパティでは、フロー変数などの変数はXPath文法上「値」が書ける位置でのみ使えます。要素名やパスそのものを変数で置き換えることはできません。
例えば、「XPath」プロパティの指定で「/root/record[@id=$flow.var1]」のように利用することはできますが、「$flow.var1」を指定してフロー変数var1に設定されているXPathを取得対象とするような処理はできません。
指定可否の例
| 指定方法 | 動作 |
|---|---|
| /root/record[@id=$flow.var1] | 動作する(述語内の比較値として参照) |
| /root/record[$flow.var1] | 動作する(整数型の場合に引数として参照※) |
| $flow.var1(変数にXPath式を格納) | 動作しない(XPath式自体の動的指定) |
| /root/$flow.var1/name | 動作しない(パス要素名の動的指定) |
※XPath文法上のエラーにならず、[]の述語内の条件に一致しない場合、変数のデータ型の指定に誤りがあることがあります。データ型をご確認ください。この例の場合は整数型を指定します。
XPath式全体を動的に変更したい場合は、以下の方法を検討してください。
方法1:BranchStart/BranchEndコンポーネントで分岐
取得対象のパターンが限定されている場合、条件分岐で複数のXPathStringコンポーネントへ固定のXPath式を指定して使い分けます。
BranchStart($flow.mode で分岐)
├─ mode=A → XPathString(XPath: /root/formatA/value)
└─ mode=B → XPathString(XPath: /root/formatB/value)
BranchEnd方法2:XSLTで事前加工
XSLTコンポーネントでXSLTを記述して対象ノードを変換してから、XPathStringコンポーネントで取得します。