0

我无法使用 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 的输出来获得快速而肮脏的 hack 的价值。

提前致谢

PS:SOAP 服务器是 Cisco CUCM 6.1.5

4

4 回答 4

0

我最近经历了同样的事情并找到了答案,请参阅我的问题和评论部分中的更新答案。 从 SOAP::Lite 响应哈希中提取 CDATA 中的特定 XML 元素

于 2014-04-18T23:40:57.363 回答
0

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

这个问题与之前发布的问题有点不同——因为我事先并不知道返回的 XML 结构(假设 Web 服务提供了许多不同的方法,并且每个方法都有不同的响应)。

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

于 2013-02-05T21:31:36.370 回答
0
$$i->value->attr->{uuid}
于 2012-06-07T21:47:22.717 回答
0
$i->{'_value'}[0]{'uuid'} 

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

于 2012-08-20T18:52:42.923 回答