-1

我有以下 XML 格式,其中有 100 个项目,如下所示

我想解析它并提取 data1 和 data2 我怎么能用XML::Twig Perl 模块做到这一点

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

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

1 回答 1

4

您的 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);
于 2011-08-01T19:23:34.420 回答