我正在尝试解析XML文件,我总是得到像
这样的输出HASH(0x2aed088)
这是我的代码
$xml = new XML::Simple;
$data = $xml->XMLin('test',keyattr => { 'name' => 'count' });
$check = sprintf($data);
print $check."\n";
你能帮助我吗?
贝斯茨
答案 0 :(得分:2)
那是因为当您解析XML时,它会将其转换为perl数据结构 - 通常是一个哈希值,并且因为XML是分层的,这可能意味着哈希的散列。
要将其打印出来,您需要“解压缩”哈希值。通常称为'pretty_printing'。在XML::Simple
,即XMLout
。
或者您可以迭代哈希键,但请记住,如果您这样做,可能需要递归多个层。
或者,您可以使用Data::Dumper
:
use Data::Dumper;
print Dumper (\$data);
就个人而言,我建议也查看其中一个XML库 - XML::Simple
不是。 (我喜欢XML::Twig
)
根据上述评论:
use strict;
use warnings;
use XML::Twig;
my $xml =
'<?xml version="1.0" encoding="UTF-8"?> <M3Monitors version="1.0"> <parameters/> <category name="name" description="Autojobs jobs currently running in the system" count="61" timestamp="2015-01-16T14:24:31"/></M3Monitors>';
my $parser = XML::Twig->new();
$parser->parse($xml);
my $count = $parser->root->first_child('category')->att('count');
print $count;
虽然注意 - 我必须修改你的XML,因为评论中的位不正确。如果您将XML格式错误作为源数据,那么XML解析将非常痛苦 - XML的设计规范称“破碎的XML是致命的”http://www.w3schools.com/xml/xml_validator.asp
我编辑了它 - 这是一个糟糕的形式,但我这样做纯粹是为了说明XML::Twig
'如何做到这一点'。您永远不应该尝试正常“修复”损坏的XML。它是一种数据结构,如果它无效,则无效。对应该的内容做出假设是完全不安全的。