提取SOAP采取CDATA特定XML元素::精简版响应哈希(Extract specific XML

2019-10-19 22:20发布

我下面的代码连接到的.asmx Web服务来获取数据。

该代码extractes的CDATA到下面%keyHash。

而不是分析整个CDATA,才有可能通过调用了它的路径抢在SOAP CDATA特定的数据元素?

我读,我可以用$ soap->的valueOf()来获取数据,是正确的? 而这将需要使用XPath?

我问,因为我不熟悉这个,我不知道如果我在正确的道路上,是否有其他方法可以做到这一点?

我的$ soap->的valueOf(“//图片/前”)尝试都失败了,他说,使用XPATH我的第一次,可能是犯错,但在这一点上我猜,如果这是正确的道路要走。

关于我是否在使用的valueOf对错路径上的任何方向(),将不胜感激!

下面是代码,它的工作原理。 我也包括从%keyHash提取的obscurated 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>

谢谢,

一种

Answer 1:

我解决了这个使用下,希望它可以帮助别人...

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}; 


文章来源: Extract specific XML element in CDATA taken from SOAP::Lite Response Hash
标签: perl soap cdata