2014-10-28 26 views
1

我對Perl完全陌生,我需要創建一個將使用SOAP Webservice的工具,並且需要將此WS提供的XML保存在輸出文件中。在這一點上,我可以使用web服務並將其保存爲散列數據,但我需要它是XML格式。如何使用Perl打印由SOAP Webservice提供的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在執行我的計劃是,Web服務在控制檯中提供,但是,當它被印刷在輸出文件中,我看到的散列作爲在Perl所定義,與對鍵=>值的,有組織的一樣,如果它是一個JSON:

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

的數據是完全正確的,但我需要將它作爲XML保存在文件中,在這一點上,我認爲我會進入錯誤的目錄撓度。

任何幫助將相當讚賞。

感謝和問候,

費利佩

回答

1

你是在正確的軌道上。 soap調用只返回一個perl數據結構,一個散列哈希。您需要額外的步驟將其轉換爲XML。

我會recommedn這個模塊http://search.cpan.org/~grantm/XML-Simple-2.20/lib/XML/Simple.pm

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

您可以提供的選項給在XML格式

+0

金,感謝,這和預期一樣更多的控制權!我已將print $輸出行更改爲: print $ output XMLout(\%keyHash,KeyAttr => [],RootName =>'response'); 現在我有output.xml填充XML,但我仍然有一個問題,也許你可以幫助我,如何輸出,而不是: <督AssetDefinitionId =」 CNTR0016716" ... /> ... 是這樣的: 賬戶號碼 ... \t < AssetDefinitionId> CNTR0016716 \t ... ... Txs! – 2014-10-29 11:40:31

+0

嘿,從來沒有想過我以前的評論,我只是發現我只需要將選項NoAttr => 1添加到XMLOut();然後XML輸出按我的預期工作 - 謝謝! – 2014-10-29 17:15:02