我想知道你是否可以在我已经做了几天的代码中发现一些灯光。如何将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