从SOAP :: Lite Response Hash中提取CDATA中的特定XML元素

时间:2014-04-19 00:41:16

标签: perl soap cdata

我的代码是连接到.asmx网络服务以获取数据。

代码将CDATA提取到下面的%keyHash中。

不是解析整个CDATA,而是可以通过调用它的路径来获取SOAP CDATA中的特定数据元素吗?

我读过我可以使用$ soap-> valueof()来获取数据,这是正确的吗?而且这需要使用XPATH?

我问我不熟悉这个,我不知道我是否走在正确的道路上,还有其他办法吗?

我的$ soap-> valueof('// Images / Front')尝试失败,说我第一次使用XPATH,可能会弄错,但此时我猜这是不是正确的方法去。

在使用valueof()时我是否在正确或错误的路径上的任何方向都将不胜感激!

这是代码,它有效。我还包括了从%keyHash中提取的暗示CDATA数据。

use SOAP::Lite +trace => 'all';

 $soap = SOAP::Lite
    -> uri('..../')
    -> on_action( sub { join '/', '.....', $_[1] } )
    -> proxy('......asmx');

 $method = SOAP::Data->name('methodName')
    ->attr({xmlns => ...../'});


 @params = (
            SOAP::Data->name(tran=> 765) ->type(''),
            SOAP::Data->name(token => 0)->type(''),
            SOAP::Data->name(type=> 1)->type('')
             );



%keyHash = %{ $soap->call($method => @params)->body->{'GetmethodNameResponse'}->{'GetmethodNameResult'} };

# iterate through all fields and print them
foreach my $k (keys %keyHash) {
        print "$k=$keyHash{$k}\n";
}

数据输出示例,我想要字符串“THIS_IS_THE_DATA_I_WANT”中的数据(由于某种原因无法将路径放在此处)

RequestResult=0
Xml=<?xml version="1.0" encoding="utf-8"?>
<Images>
    <Front>THIS_IS_THE_DATA_I_WANT</Front>
</Images>

谢谢,

A

1 个答案:

答案 0 :(得分:0)

我通过使用以下内容解决了这个问题,希望它有助于某人...

use XML::Simple; 
%keyhash = %{ $soap->call($method => @params)->body->{'GetCheckXmlResponse'}->{'GetCheckXmlResult'}};
$getxml= %keyhash->{Xml}; 
$parsexml = XMLin($getxml); 
print Dumper($parsexml); # Use this to point to your data and then grab it as per the line below 
$frontside = $parsexml->{Images}->{Front};