2011-08-01 10 views
-1

私はそれを解析し、どのようにDATA1とDATA2を抽出したい以下解析XML ::小枝

として、私はXML::Twig Perlモジュール

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

</Item> 
<Item> 
<data1> <date3> data22 </data3> </data1> 
<data2> data2 </data2> 
</Item> 
.... 
でこれを行うことができ、私は100個のアイテムを持って、次のXML形式を持っています
+3

これは整形式XMLではないため、同等ではありませんXMLパーサーによってsed。 「<\element>」を「」に変更しても問題ありません。 http://search.cpan.org/~mirod/XML-Twig-3.38/Twig.pmを読んだ後、何を試しましたか? – RedGrittyBrick

+0

-1がXMLではないと主張するため-1。 – tadmc

答えて

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); 
+0

答えをありがとう、申し訳ありませんが、私はあなたが答えを書いたのと同時に質問を更新しました。 – Rubin

+0

@Rubin - 'eval {$ _-> first_descendant( 'data3') - > trimmed_text}'のような子孫アイテムにアクセスできます。あなたの最善の策は、私が投稿した例を使って遊ぶことと、メソッドの説明のために[XML :: Twig](http://search.cpan.org/perldoc?XML::Twig)のドキュメントを見ることだと思います。 – bvr