XML ::简单而恼人的输出

时间:2015-01-19 15:51:51

标签: xml perl

我正在尝试解析XML文件,我总是得到像

这样的输出
HASH(0x2aed088)

这是我的代码

$xml = new XML::Simple;
$data = $xml->XMLin('test',keyattr => { 'name' => 'count' });
$check = sprintf($data);
print $check."\n";

你能帮助我吗?

贝斯茨

1 个答案:

答案 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。它是一种数据结构,如果它无效,则无效。对应该的内容做出假设是完全不安全的。