2011-08-01 6 views
-1

je le format XML suivant qui a 100 éléments comme le dessousparsing XML avec XML :: Twig

Je veux analyser et extraire données1 et données2 comment puis-je faire avec XML::Twig module Perl

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

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

Ce n'est pas bien formé XML et ne peut pas être pair sed par un analyseur XML. Si vous changez «<\element>» en «», cela sera OK. Après avoir lu http://search.cpan.org/~mirod/XML-Twig-3.38/Twig.pm qu'avez-vous essayé? – RedGrittyBrick

+0

-1 pour affirmer que c'est du XML quand ce n'est pas du XML. – tadmc

Répondre

4

Votre XML n'est pas conforme aux spécifications, donc aucun parseur ne peut le traiter tel quel. Les principaux problèmes sont les suivants:

  • XML est sensible à la casse, donc Item est autre chose que item
  • balises de fermeture commencent par barre oblique, pas anti-slash
  • il devrait y avoir élément de niveau supérieur

Corriger ces problèmes, ce code fonctionne:

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

Merci pour la réponse, désolé j'ai mis à jour ma question dans le même temps que vous avez écrit la réponse. – Rubin

+0

@Rubin - vous pouvez accéder aux éléments descendants comme ceci: 'eval {$ _-> first_descendant ('data3') -> trimmed_text}'. Je pense que votre meilleur pari est de jouer avec l'exemple que j'ai posté et regarder les documents [XML :: Twig] (http://search.cpan.org/perldoc?XML::Twig) pour la description des méthodes. – bvr