【发布时间】:2009-06-17 07:06:38
【问题描述】:
我想知道您是否可以对我这几天一直在做的代码有所了解。
我一直在尝试使用 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
【问题讨论】:
-
请编辑您的帖子并放置所有代码部分以提高可读性
-
你的初始代码(应该可以工作的那个)至少有几个错别字: $X_out->{device}{name} 应该是 $X_out->{device}{Name }(大写N,实际上上面的行有正确的字段名称),与下面的行相同,其中'error'应该是'Error'
-
嗨 Manni,是的,你是对的,但是当我尝试在 XMLout() 上传递 $VARS1 时,它给了我元素
... 和 虽然基于已解析的 perl 等效项,但它并不相同。感谢您的帮助!
标签: perl xml-simple