-1

以下のように100個のアイテムを持つ次のXML形式があります

それを解析して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では大文字と小文字が区別されるためItemitem
  • 終了タグはバックスラッシュではなくスラッシュで始まります
  • トップレベルの要素があるはずです

これらの問題を修正すると、このコードは機能します。

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 に答える