Я бег через осторожное введение к XML::LibXML
в Perl XML::LibXML by Example и не могу показаться, чтобы получить хэш атрибутов работает. Например, что случилось с следующим кодом?XML :: LibXML неожиданного атрибут ошибки доступа значение
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $version = XML::LibXML::LIBXML_VERSION;
my $dot_version = XML::LibXML::LIBXML_DOTTED_VERSION;
my $run_version = XML::LibXML::LIBXML_RUNTIME_VERSION;
print "LibXML version: $version\n";
print "LibXML dotted version: $dot_version\n";
print "LibXML runtime version: $run_version\n";
print "Perl version: $^V\n";
my $xml = q{
<record>
<entry atr1="a" atr2="b" atr3="c" />
</record>
};
my $dom = XML::LibXML->load_xml(string => $xml);
my ($entry) = $dom->documentElement->getChildrenByTagName('entry');
print "\$entry is a: ", ref($entry), "\n";
print "node name: ", $entry->nodeName, "\n";
print "Attribute: ", $entry->getAttribute('atr1'), "\n"; # Line 26
print "Attribute: ", $entry->{'atr1'}, "\n"; # Line 27
С следующим выводом:
$./hashtest.pl
LibXML version: 20706
LibXML dotted version: 2.7.6
LibXML runtime version: 20706
Perl version: v5.10.1
$entry is a: XML::LibXML::Element
node name: entry
Attribute: a
Not a HASH reference at ./hashtest.pl line 27.
Я ожидаю линия 26 и 27, чтобы иметь тот же результат. Любое руководство будет высоко оценено.
Edit: Добавлено более полная информация о версии
работы скрипта на моей системе, но если '$ entry-> GetAttribute («ATR1»)' работает, почему вы заботитесь о '$ запись -> { 'ATR1'} '? – redneb
Было бы неплохо, если бы вы включили '$ XML :: LibXML :: VERSION' тоже. – ikegami
'XML :: LibXML :: LIBXML_DOTTED_VERSION' - это функция, которая возвращает версию базовой библиотеки libxml. Полезнее показать значение скалярного '$ XML :: LibXML :: VERSION', которое является версией библиотеки Perl. В настоящее время доступна версия 2.0128, и я установил, что ваш код отлично работает с 2.0124. Но, пожалуйста, обратите внимание на слова [икегами ниже] (http://stackoverflow.com/a/39378246/622310), что функция, которую вы пытаетесь использовать, недокументирована и поэтому должна считаться недоступной. Мне было бы интересно узнать, как вы пришли к мысли, что это будет работать вообще? – Borodin