我想知道你是否可以在我已經做了幾天的代碼中發現一些燈光。如何將Data :: Dumper輸出轉換回Perl數據結構?
我一直在嘗試使用XMLout()和XMLin()方法將Perl分析的哈希轉換回XML,並且這種格式已經相當成功。
#!/usr/bin/perl -w
use strict;
# use module
use IO::File;
use XML::Simple;
use XML::Dumper;
use Data::Dumper;
my $dump = new XML::Dumper;
my ($data, $VAR1);
Topology:$VAR1 = {
'device' => {
'FOC1047Z2SZ' => {
'ChassisID' => '2009-09',
'Error' => undef,
'Group' => {
'ID' => 'A1',
'Type' => 'Base'
},
'Model' => 'CATALYST',
'Name' => 'CISCO-SW1',
'Neighbor' => {},
'ProbedIP' => 'TEST',
'isDerived' => 0
}
},
'issues' => [
'TEST'
]
};
# create object
my $xml = new XML::Simple (NoAttr=>1,
RootName=>'data',
SuppressEmpty => 'true');
# convert Perl array ref into XML document
$data = $xml->XMLout($VAR1);
#reads an XML file
my $X_out = $xml->XMLin($data);
# access XML data
print Dumper($data);
print "STATUS: $X_out->{issues}\n";
print "CHASSIS ID: $X_out->{device}{ChassisID}\n";
print "GROUP ID: $X_out->{device}{Group}{ID}\n";
print "DEVICE NAME: $X_out->{device}{Name}\n";
print "DEVICE NAME: $X_out->{device}{name}\n";
print "ERROR: $X_out->{device}{error}\n";
我可以訪問XML中的所有元素,沒有問題。
但是,當我試圖創建一個文件,將容納解析哈希,問題出現,因爲我似乎無法訪問所有的XML元素。我想,我無法用下面的代碼解壓文件。
#!/usr/bin/perl -w
use strict;
#!/usr/bin/perl
# use module
use IO::File;
use XML::Simple;
use XML::Dumper;
use Data::Dumper;
my $dump = new XML::Dumper;
my ($data, $VAR1, $line_Holder);
#this is the file that contains the parsed hash
my $saveOut = "C:/parsed_hash.txt";
my $result_Holder = IO::File->new($saveOut, 'r');
while ($line_Holder = $result_Holder->getline){
print $line_Holder;
}
# create object
my $xml = new XML::Simple (NoAttr=>1, RootName=>'data', SuppressEmpty => 'true');
# convert Perl array ref into XML document
$data = $xml->XMLout($line_Holder);
#reads an XML file
my $X_out = $xml->XMLin($data);
# access XML data
print Dumper($data);
print "STATUS: $X_out->{issues}\n";
print "CHASSIS ID: $X_out->{device}{ChassisID}\n";
print "GROUP ID: $X_out->{device}{Group}{ID}\n";
print "DEVICE NAME: $X_out->{device}{Name}\n";
print "DEVICE NAME: $X_out->{device}{name}\n";
print "ERROR: $X_out->{device}{error}\n";
你有什麼想法,我怎麼能訪問文本文件中的$ VAR1?
問候,
newbee_me
請編輯您張貼,並把所有的代碼段這樣可讀性更好 – Dror 2009-06-17 07:29:07
您最初的代碼(即應該工作的一個)在至少有幾個錯別字:$ X_out - > {device} {name}應該是$ X_out - > {device} {Name}(大寫N,實際上面的行有正確的字段名),與行相同下面,'錯誤'應該是'錯誤' – mirod 2009-06-17 07:52:51
嗨曼尼, 是的,你是對的,但當我嘗試通過XMLout()$ VARS1,它給了我的元素 ... 和 儘管基於解析的perl等價物,但它並不相同。 感謝您的幫助! –
2009-06-17 09:25:25