如何使用Perl打印SOAP Webservice提供的XML

时间:2014-10-28 20:30:28

标签: web-services perl soap soaplite

我是Perl的新手,我需要创建一个使用SOAP Web服务的工具,我需要将此WS提供的XML保存在输出文件中。此时我可以使用web服务并将其保存为哈希数据,但我需要它是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();

当我完成跟踪时,我可以看到web服务在我的程序执行时在控制台中提供的XML,但是,当它在输出文件中打印时,我看到Perl中定义的哈希,密钥对=>值,组织就像它是一个json:

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

数据完全正确,但我需要将其作为XML保存在文件中,此时我认为我的方向错误。

任何帮助都将得到公平的赞赏。

谢谢和问候,

菲利普

1 个答案:

答案 0 :(得分: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格式