2014-04-19 2 views
1

아래 코드는 .asmx 웹 서비스에 연결하여 데이터를 가져 오는 중입니다.SOAP에서 가져온 CDATA에서 특정 XML 요소 추출 :: Lite 응답 해시

코드는 CDATA를 아래의 % key 해시로 추출합니다.

전체 CDATA를 구문 분석하는 대신 SOAP CDATA의 특정 데이터 요소를 가져 와서 경로를 호출 할 수 있습니까?

나는 $ soap-> valueof()를 사용하여 데이터를 얻을 수 있다고 읽었는데, 맞습니까? 이것이 XPATH의 사용을 요구할 것인가?

나는이 사실에 익숙하지 않아서 내가 올바른 길을 가고 있는지 알지 못한다. 다른 방법이 있을까?

My $ 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> 

가 감사 (어떤 이유로 여기에 경로를 넣어 불가능)

+0

다음을 사용하여이 문제를 해결했습니다. 도움이되기를 바랍니다. XML :: Simple; % keyhash = % {$ soap-> call ($ method => @params) -> body -> { 'GetCheckXmlResponse'} -> { 'GetCheckXmlResult'}}}; $ getxml = % keyhash -> {Xml}; $ parsexml = XMLin ($ getxml); 인쇄 Dumper ($ parsexml); # 이것을 사용하여 데이터에 ppint 한 다음 아래 줄에 따라 그 내용을 가져옵니다. $ frontside = $ parsexml -> {Images} -> {Front}; – user2574678

답변

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