Как напечатать XML, предоставленный SOAP Webservice, используя Perl

Я совершенно новичок в Perl, и мне нужно создать инструмент, который будет использовать веб-сервис SOAP, и мне нужно сохранить XML, предоставленный этим WS, в выходной файл. На этом этапе я могу использовать веб-сервис и сохранить его как хеш-данные, но мне нужно, чтобы он был в формате XML.

Мой код довольно прост и выглядит так:

#!/usr/bin/perl -w
use SOAP::Lite ( +trace => "all", maptype => {} );
use IO::File;
use Data::Dump "pp";
sub SOAP::Transport::HTTP::Client::get_basic_credentials {
   return 'username' => 'password';
}
my $soap = SOAP::Lite
    -> proxy('https://.../WebService.do?SOAP', ssl_opts => [     SSL_verify_mode => 0 ] ); 
my $method = SOAP::Data->name('execute') -> attr({xmlns => 'http://.../'});
my $output = IO::File->new(">output.xml");
my %keyHash = %{ $soap->call($method)->body};
print $output pp({%keyHash});
$output->close();

Поскольку трассировка заполнена, я вижу XML, который веб-сервис предоставляет в консоли во время выполнения моей программы, но, когда он печатается в выходном файле, я вижу хэш, определенный в Perl, с парами Ключ => значения, организованные так же, как если бы это был JSON:

{
  Docs => {
    AssetDefinition => "AccountNumber",
    BatchId => 1,
    Doc => [
      {
        AssetDefinitionId => "CNTR0016716",
        DateForRetention => "",
        FileName => "",
        FilePath => "",
        SequenceNumber => "",
      },
    ],
  },
}

Данные полностью правильные, но мне нужно было сохранить их в файле в формате XML, и на данный момент я думаю, что я иду в неправильном направлении.

Любая помощь будет оценена по достоинству.

Спасибо и всего наилучшего,

Фелипе

1 ответ

Решение

Ты на правильном пути. Вызов soap просто возвращает структуру данных perl, хэш хэшей. Вам нужен дополнительный шаг, чтобы преобразовать его в XML.

Я рекомендовал бы этот модуль http://search.cpan.org/~grantm/XML-Simple-2.20/lib/XML/Simple.pm

use XML::Simple qw(:strict);
my $xml = XMLout(\%keyHash);

Вы можете предоставить опции, чтобы дать больше контроля над форматированием XML

Другие вопросы по тегам