Разбор XML с XML :: Twig - PullRequest
       8

Разбор XML с XML :: Twig

0 голосов
/ 01 августа 2011

У меня есть следующий формат XML, который имеет 100 элементов, как показано ниже

Я хочу разобрать его и извлечь data1 и data2, как я могу сделать это с XML :: Twig Perl module

<Item>
<data1>  <data3> date </data3> </data1>
<data2>   data2 </data2>

</Item>
<Item>
<data1>  <date3> data22 </data3> </data1>
<data2>   data2 </data2>
</Item>
....

1 Ответ

4 голосов
/ 01 августа 2011

Ваш XML не соответствует спецификации, поэтому никакой парсер не сможет обработать его как есть.Основные проблемы:

  • XML чувствителен к регистру, поэтому Item это нечто иное, чем item
  • закрывающие теги начинаются с косой черты, а не обратной косой черты
  • должен быть элемент верхнего уровня

Исправляя эти проблемы, этот код работает:

use strict; use warnings;

use XML::Twig;

my $data = <<END_DATA;
<items>
    <item>
        <data1>   data1 </data1>
        <data2>   data2 </data2>
    </item>
    <item>
        <data1>   data1 </data1>
        <data2>   data2 </data2>
    </item>
</items>
END_DATA


my $t = XML::Twig->new(
    twig_handlers => {
        'item' => sub {
            # process each item and print contents of dataN elements
            print
                $_->first_child_trimmed_text('data1'), "\t",
                $_->first_child_trimmed_text('data2'),"\n";
        },
    },
)->parse($data);
...