2015-01-19 2 views
0

Я пытаюсь разобрать XML-файл, и я получаю все время выход какXML :: Simple и раздражающий Output

HASH(0x2aed088) 

вот мой код

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

Вы можете помочь меня ?

Bests

+1

Что вы ожидаете, когда конвертируете ссылку на хэш в строку? Вам нужно вытащить данные, которые вам действительно нужны. – Quentin

+0

Если вы можете дать образец XML и ожидаемого вывода, я создам решение XML :: Twig. – Sobrique

+0

пытается извлечь значение счета – Wanexa

ответ

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 в обычном режиме. Это структура данных, и если она недействительна, она недействительна. Просто не безопасно делать предположения о том, что это должно быть.

+2

Существует сводка XML-библиотек на [mstpan] (http://shadow.cat/blog/matt-s-trout/mstpan-3 /). – Quentin

+0

Это хорошее резюме. Я думаю, что 'XML :: Simple' предполагается говорить правду. SMTP и SNMP имеют одинаковую проблему;) – Sobrique

+6

Проблема с 'XML :: Simple' заключается в том, что имя заставляет людей думать, что это простой способ справиться с XML вместо того, что он есть, что является способом решения простых XML. – Quentin