Я немного XML, который выглядит следующим образом:С XML :: Twig, есть ли способ найти «first_child» с определенным атрибутом?
<?xml version="1.0" encoding="UTF-8"?>
<DataSet>
<Category>
<Name mode="source">somename</Name>
<Name mode="destination">someothername</Name>
<Content>Some text here</Content>
</Category>
</DataSet>
То, что я пытаюсь сделать, это процесс «категория», и извлечь другое имя на основе контекста.
Я попытался перебор его children
- это работает:
use strict;
use warnings;
use XML::Twig;
sub process_category {
my ($twig, $category) = @_;
my $cat_name;
foreach my $name ($category->children('Name')) {
if ($name->att('mode') eq 'source') {
$cat_name = $name->text;
}
}
print "$cat_name ", $category->first_child_text('Content'), "\n";
}
my $twig =
XML::Twig->new(twig_handlers => { 'Category' => \&process_category })
->parse(\*DATA);
__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<DataSet>
<Category>
<Name mode="source">somename</Name>
<Name mode="destination">someothername</Name>
<Content>Some Text</Content>
</Category>
</DataSet>
Однако мне интересно, - есть лучший способ, чем итерация элементы? Я не могу понять, поддерживает ли first_child
поиск атрибута, или если есть другой метод, который делает то же самое.
Lovely, это звучит даже лучше, чем решение для обработки кода, на которое я смотрел. – Sobrique