Как использовать Perl XML :: Twig для подсчета нескольких тегов в XML? - PullRequest
1 голос
/ 24 августа 2010

Я использую XML :: Twig для анализа моего входного XML с использованием Perl. Мне нужно выделить конкретный узел в этом XML и проверить этот узел, чтобы увидеть, имеет ли он несколько тегов <p>, а затем посчитать слова в этих тегах P. Например:

<XML> 
<name>
</name>
<address>
<p id="1">a b c d </p>
<p id="2">y y y </p>
</address>
</XML>

Выход:

Адрес имеет 2 тега абзаца с 7 слова.

Есть предложения?

1 Ответ

4 голосов
/ 25 августа 2010

Вот один из способов сделать это:

use strict;
use warnings;
use XML::Twig;

my $xfile = q(
<XML>  
<name> 
</name> 
<address> 
<p id="1">a b c d </p> 
<p id="2">y y y </p> 
</address> 
</XML> 
);

my $t = XML::Twig->new(
    twig_handlers => { 'address/p' => \&addr}
);
my $pcnt = 0;
my $wcnt = 0;
$t->parse($xfile);
print "Address has $pcnt paragraph tags with $wcnt words.\n";

sub addr {
    my ($twig, $add) = @_;
    my @words = split /\s+/, $add->text();
    $wcnt += scalar @words;
    $pcnt++;
}

__END__

Address has 2 paragraph tags with 7 words.

XML :: Twig имеет специальный веб-сайт с документацией и учебным пособием для описания использованной выше техники обработки.

...