4

JDeveloperを使用してBPELプロセスを作成しています。リクエスト xml からノードの値を抽出しようとすると、問題が発生します。

リクエスト XML は次のようになります。

<ConvertTemp xmlns="http://www.nikhil.net/">
   <Temperature>200</Temperature>
   <FromUnit>degreeCelsius</FromUnit>
   <ToUnit>degreeFahrenheit</ToUnit>
</ConvertTemp>

SOAP ボディからリクエスト XML 文字列を抽出し、それを別の文字列変数 (strRequest など) に入れることができます。

この strRequest 変数から温度ノードの値 (200) を抽出しようとしています。これを数値に変換し、double 型の別の変数に代入します。

温度ノードの値を抽出する関数の XPath クエリは何ですか?

number(bpws:getVariableData('strRequest', '', '<XPath query>'))

私はもう試した

bpws:getVariableData('strRequest', '', '/ConvertTemp/Temperature/')
bpws:getVariableData('strRequest', '', '/ConvertTemp/Temperature')
bpws:getVariableData('strRequest', '', 'Temperature')
bpws:getVariableData('strRequest', 'strRequest', '/ConvertTemp/Temperature')
bpws:getVariableData('strRequest', 'strRequest', 'Temperature')

および類似の組み合わせ。出力:上記のすべての試行のNaN

4

2 に答える 2

0

デフォルトの名前空間があるため、それを考慮する必要があるかもしれません。BPEL にこれを行う特別な方法があるかどうかはわかりませんが、一般的な xpath 構文では、xpath を次のように設定します。

/*[local-name() = "ConvertTemp" and namespace-uri() = "http://www.nikhil.net/"]/*[local-name() = "Temperature" and namespace-uri() = "http://www.nikhil.net/"]/text()

例えば

with xml as (select xmltype('<ConvertTemp xmlns="http://www.nikhil.net/">
  2     <Temperature>200</Temperature>
  3     <FromUnit>degreeCelsius</FromUnit>
  4     <ToUnit>degreeFahrenheit</ToUnit>
  5  </ConvertTemp>') x from dual)
  6  select extractvalue(x.x, '/*[local-name() = "ConvertTemp" and namespace-uri() = "http://www.nikhil.net/"]'
  7  ||'/*[local-name() = "Temperature" and namespace-uri() = "http://www.nikhil.net/"]/text()') as temperature
  8    from xml x
  9  /

TEMPERATURE
--------------------------------------------------------------------------------
200
于 2012-12-03T10:09:38.937 に答える
0

試すbpws:getVariableData('strRequest', '', '/ConvertTemp/Temperature/text()')

「200」はtextノードの下のTemperature ノードであるため

于 2012-11-29T13:50:39.740 に答える