如何从SOAP :: Lite中的复杂SOAP :: DATA结构中获取属性?

时间:2012-06-07 20:51:28

标签: perl soap

我无法使用SOAP :: Lite从SOAP响应中获取简单的属性值。 下面是SOAP :: Data的代码和输出。我正在尝试获取属性// response / dirn / attr / uuid

的值
my $cm = new SOAP::Lite
  uri => 'http://www.cisco.com/AXL/API/1.0',
  proxy => "https://10.0.0.1:8443/axl/";

my $res = $cm->getPhone(
  SOAP::Data->name(phoneName => 'SEP00270D3D7A4C'),
);

for my $i ($res->valueof('//device/lines/line')) {
  print Dumper($i);
  #print $i->{dirn}->{attr}->{'uuid'}."\n"; # line below give me an error
}

这里是Data :: Dumper的输出。我实际上有所请求的值,但我无法通过SOAP :: Data

获得它
$VAR1 = \bless( {
'_signature' => [],
'_value' => [
  bless( {
    '_name' => 'dirn',
    '_signature' => [],
    '_value' => [
      ''
    ],
    '_prefix' => '',
    '_attr' => {
      'uuid' => '{615C3550-1EFD-56C7-3788-2AA8725880E3}' #!!!!!!!!!!!!!!!!!!!!!!!!!!
    }
  }, 'SOAP::Data' ),
],
'_attr' => {}
}, 'SOAP::Data' );

我花了几个小时试图获得此属性值。我已经考虑过使用Data :: Dumper的输出来获得快速而又脏的黑客的价值。

提前致谢

P.S。:SOAP服务器是Cisco CUCM 6.1.5

4 个答案:

答案 0 :(得分:0)

$$i->value->attr->{uuid}

答案 1 :(得分:0)

$i->{'_value'}[0]{'uuid'} 

我认为,但我不确定[0]。

答案 2 :(得分:0)

我有同样的问题,但找不到“快速简便”的解决方案。我开发了一个Perl库模块来使用某些供应商Web服务(WSDL)。我已经完成了许多这样的Web服务接口,但是直到现在 - 所有数据都作为XML“元素”返回。相反,这个特定的Web服务将大部分数据作为XML元素返回,但也设置了一些 - 作为XML属性。我无法获取作为属性返回的值 - 因为SOAP :: Data方法(valueof(),body()等)仅返回XML元素的值,但不返回关联的属性。

这个问题与之前发布的问题略有不同 - 因为我不知道正在返回的XML结构(给定Web服务提供了许多不同的方法,每个方法都有不同的响应)。

所以问题是 - 如何获得通用响应SOAP数据的所有 XML数据(包括元素和属性)

答案 3 :(得分:0)

我最近经历了同样的事情并找到了答案,请在评论部分查看我的问题和我更新的答案。  Extract specific XML element in CDATA taken from SOAP::Lite Response Hash

相关问题