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 回答