Как я могу разобрать XML с помощью Perl? - PullRequest
0 голосов
/ 24 октября 2009

У меня есть файл с

<Doc>
<Text>
....
</Text>
</Doc>
<Doc>
<Text>
</Text>
</Doc>

Как извлечь только элементы <text>, обработать их и затем эффективно извлечь следующий текстовый элемент?

Не знаю, сколько у меня в файле?

Ответы [ 2 ]

8 голосов
/ 24 октября 2009
#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;

my $t = XML::Twig->new(
    twig_roots  => {
        'Doc/Text' => \&print_n_purge,
});

$t->parse(\*DATA);

sub print_n_purge {
    my( $t, $elt)= @_;
    print $elt->text;
    $t->purge;
}

__DATA__
<xml>
<Doc>
<Text>
....
</Text>
</Doc>
<Doc>
<Text>
</Text>
</Doc>
</xml>
7 голосов
/ 24 октября 2009

XML :: Simple может сделать это легко:

## make sure that there is some kind of <root> tag
my $xml_string = "<root><Doc>...</Doc></root>";

my $xml = XML::Simple->new();
$data = $xml->XMLin($xml_string);

for my $text_node (@{ $data->{'Doc'} }) {
    print $text_node->{'Text'},"\n"; ## prints value of Text nodes
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...