2012-11-29 34 views
4

我正在使用JDeveloper编写BPEL流程。当我尝试从我的请求xml中提取节点的值时,我遇到了一个问题。从SOAP中抽取XPath Body请求BPEL中的字符串

请求XML将如下:

我能提取请求XML字符串了SOAP体,放入另一个字符串变量(比如strRequest)。

我想从这个strRequest变量中提取Temperature节点(它是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') 

和similiar组合。 输出:NaN的所有试验上述

回答

0

尝试bpws:getVariableData('strRequest', '', '/ConvertTemp/Temperature/text()')

,因为“200”是一个text节点下Temperature节点

+0

感谢WEIMA和我道歉延迟回应。但结果相同。 – Nikhil

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