У меня есть XML-данные следующим образомPerl хэш с помощью LibXML
<type>
<data1>something1</data1>
<data2>something2</data2>
</type>
<type>
<data1>something1</data1>
<data2>something2</data2>
</type>
<type>
<data1>something1</data1>
</type>
Как можно видеть, дочерний узел data2 иногда нет.
Я использовал this в качестве ориентира, чтобы создать следующий код
my %hash;
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($file_name);
my @nodes = $doc->findnodes("/type");
foreach my $node(@nodes)
{
my $key = $node->getChildrenByTagName('data1');
my $value = $node->getChildrenByTagName('data2');
$hash{$key} = $value;
}
Позже, я использую этот хэш для создания еще некоторые данные, основанные на факте, если data2 дочерний узел присутствует или нет.
Я использую ne
оператор в предположении, что данные в %hash
являются ключевыми пары значений строк и когда data2
нет, Perl вставляет пространство как значение в хэш (я напечатал этот хэш и обнаружил, что только пространство печатается a)
Однако в итоге я получил следующие ошибки компиляции.
Operation "ne": no method found,
left argument in overloaded package XML::LibXML::NodeList,
right argument has no overloaded magic at filename.pl line 74.
Как это решить? Какая лучшая структура данных хранит эти данные, когда мы, что иногда узел там не будет?
Это объясняет это. Мне нужно будет обновить библиотеку сторонних разработчиков libXML. – Recker
@Recker, это модуль Perl, который нуждается в обновлении, а не библиотеку libxml – ikegami