Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 简单而烦人的输出_Xml_Perl - Fatal编程技术网

Xml 简单而烦人的输出

Xml 简单而烦人的输出,xml,perl,Xml,Perl,我试图解析一个XML文件,我一直得到一个输出,比如 HASH(0x2aed088) 这是我的密码 $xml = new XML::Simple; $data = $xml->XMLin('test',keyattr => { 'name' => 'count' }); $check = sprintf($data); print $check."\n"; 你能帮我吗 这是因为当您解析XML时,它会将其转换为perl数据结构—通常是散列,并且由于XML是分层的,这可能意味着散

我试图解析一个XML文件,我一直得到一个输出,比如

HASH(0x2aed088)
这是我的密码

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


这是因为当您解析XML时,它会将其转换为perl数据结构—通常是散列,并且由于XML是分层的,这可能意味着散列

要打印出来,您需要“解包”散列。通常这被称为“漂亮的印刷”。在
XML::Simple
中,这就是
XMLout

或者您可以迭代散列键,但请记住,如果这样做,您可能需要递归多个层

或者,您可以使用
Data::Dumper

use Data::Dumper;
print Dumper (\$data); 
就我个人而言,我建议也看看其中一个XML库——
XML::Simple
不是。(我喜欢)

根据上述评论:

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::Twig;
我的$xml=
'   ';
my$parser=XML::Twig->new();
$parser->parse($xml);
my$count=$parser->root->first_child('category')->att('count');
打印$count;
尽管注意-我不得不修改您的XML,因为注释中的位格式不正确。如果将格式不正确的XML作为源数据,那么XML解析将是非常痛苦的——XML的设计规范说“破坏的XML是致命的”


我编辑过它——这是一种糟糕的形式,但我这样做纯粹是为了说明
XML::Twig
是如何做到的。您不应该尝试正常地“修复”损坏的XML。这是一个数据结构,如果它无效,它就无效。对它应该是什么进行假设是不安全的

当您将对散列的引用转换为字符串时,您希望发生什么?您需要从中提取您真正关心的数据。如果您可以提供XML示例和预期输出,我将起草一个
XML::Twig
解决方案。尝试提取count值可能更容易将其放入您的问题中。您确定这是您的XML吗?因为它的格式不正确-例如,您没有关闭“M3Monitors”标记。上有XML库的摘要。这是一个很好的摘要。我认为
XML::Simple
被认为是在说实话。SMTP和SNMP的问题大致相同;)
XML::Simple
的问题是,这个名字让人们认为它是一种处理XML的简单方法,而不是它是什么,这是一种处理简单XML的方法。转储程序的输出是整个文件,我要用XML::twigw检查一下,你到底想从XML中提取什么?你能举例说明你的来源吗<代码>XML::Twig也有同样的问题——它不是通灵的,你需要告诉它提取什么。