Как проанализировать вывод ответа SOAP в формате данных HASH?см. ниже код для деталей - PullRequest
0 голосов
/ 12 мая 2019
#perl!
use warnings;
use strict;
use XML::Compile::SOAP;
use XML::Compile::SOAP11;
use XML::Compile::WSDL11;
use XML::Compile::Transport::SOAPHTTP;
use Data::Dumper;
##my other variables pointing to wsdl and xsd files.
my $url="http://myhost.com:9080/imws/services/ImpactManager/";
my %inargs_connect = (
    "userName"  => "xxxx",
    "password" => "xxxxxxxxxx",
    "imname"  => "yyyyyyyyyyy",
    "bufferType"  => "abcd"
);

my $wsdl = XML::Compile::WSDL11->new;
$wsdl->addWSDL($wsdl_file);
$wsdl->compileCalls(address =>$url);
my ($answer, $trace) = $wsdl->call( 'Connect', %inargs_connect);
print ($answer);

вышеуказанный код печатает: HASH (0x47f8b28)

в последнем операторе печати, если я использую самосвал, я получаю ответ ниже. print Dumper($answer);

$VAR1 = {
          'outargs' => {
                         'connectionId' => '1557666855346'
                       }
        };

как разобрать требуемые значения как, мне нужно иметь возможность легко получить доступ к «connectionId» и «1557666855346»?

Любые идеи приветствуются. Заранее спасибо. Спасибо, Каушик КМ.

Ответы [ 3 ]

1 голос
/ 12 мая 2019

$answer представляется хэш-ссылкой, поэтому вы получите доступ к данным, используя обычные методы разыменования:

my $conn_id = $answer->{outargs}{connectionId};
print "$conn_id\n";

Вывод:

1557666855346
0 голосов
/ 15 мая 2019

перебирает все ключи в answerear = {outargs => {key1, key2}}

# This should remove the error of "Experimental keys on scalar is now forbidden" by wrapping the hashRef in %{}
for ( keys %{$answear->{outargs}}) {
    # $_ here will be the key and if you want to access the value use $answear->{outargs}->{$_}
    print "key: $_, value: $answear->{outargs}->{$_}\n";
}

выход:

key: connectionId, value: 1557666855346

Надеюсь, это вам поможет!

0 голосов
/ 12 мая 2019
my %fhash = %{$answer};
my $key = "";
foreach $key (keys %fhash)
{
print "keys are\n \"$key\" its value is (${$answer}{$key}) \n";

    foreach my $key2 (keys %${$answer}{$key})
    {
    print "keys of(${$answer}{$key})\n \"$key2\"\n";
    }
}

не работает и выдает ошибку следующим образом: Экспериментальные ключи на скаляре теперь запрещены в строке 64 CreateEvent.pl. Тип аргумента 1 для ключей должен быть хеш или массив (не срез хеша ключ / значение) вСоздайте строку Event.pl 64 рядом с "}

. Может кто-нибудь исправить это, пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...