XPathStringコンポーネントでXPath式を設定したフロー変数を指定しても値を取得できません

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コンポーネントで取得します。

 

この記事は役に立ちましたか?
3人中0人がこの記事が役に立ったと言っています

このセクションの記事

他のキーワードで検索する