无法使用perl读取XML

时间:2015-07-22 12:13:14

标签: xml perl

我正在尝试使用Perl读取xml文件。

我尝试XML::Simple并使用XML::LibXML,但在这两种情况下我都遇到了问题。

对于XML::Simple,它说

"keys on reference is experimental
Using a hash as a reference is deprecated"

当我使用以下

foreach my $k ({keys %$ref->{version}}) # output to conf
{
    print STDERR Dumper($k);
}

对于XML::LibXML,我得到了"Can't locate XML/LibXML/Error.pm in @INC (you may need to install the XML::LibXML::Error module)"

当我尝试使用LibXML安装Activeperl ppm UI时,我在那里找不到该软件包。然后,我从其他来源下载了LibXML,并在"C:\Perl64\lib""C:\Perl64\site\lib"中复制了所需的文件。

我使用的是perl 5,版本20。 我怎样才能使它发挥作用?

2 个答案:

答案 0 :(得分:4)

XML::LibXML是一个XS模块,因此只复制源(甚至编译文件)通常不起作用。你必须正确安装它。

语法%$ref->{version}很奇怪。你的意思是

%{ $ref->version }

还是其他什么?你能否展示Data::Dumper' s Dumper($ref)

答案 1 :(得分:3)

您的XML ::简单问题只是对语法的误解。看起来您意识到需要使用%取消引用哈希引用,但是您没有意识到需要将表达式返回哈希引用的小{ ... }块。

所以你在哪里:

%$ref->{version}

你真的想要:

%{$ref->{version}}

哦,它比这稍差一点。你在表达式周围有一个额外的{ ... } - 所以你明确地将表达式转回哈希引用。你想要的是:

foreach my $k (keys %{$ref->{version}})

您在$k中返回的每个值都将是一个哈希键。哈希键总是字符串。因此,您在下一行中对Dumper的调用也是不必要的。