2010-08-04 4 views
5

J'ai une référence de tableau qui a un certain nombre de références de tableau à l'intérieur. Les références de tableau imbriquées contiennent également les références de tableau. (Ceci est le style tree de XML::Parser.)Comment accéder à une arborescence d'analyse créée par XML :: Parser?

my $Filename = "sample.xml"; 

my $Parser = new XML::Parser(Style => 'tree'); 

my $Tree = $Parser->parsefile($Filename); 

Ici, le $Tree est le tableau de référence, il sera référence à un tableau, le contenu et la profondeur imbriquée tout dépend du fichier xml. Je veux traverser le tableau imbriqué $Tree et imprimer le contenu.

+0

pouvez-vous inclure votre fichier d'exemple ou un morceau de texte de celui-ci. –

+0

C'est simplement un fichier XML. Essayez avec n'importe quel fichier XML. –

+0

Vous devriez utiliser 'XML :: Parser-> new (Style => 'tree')' au lieu de 'new XML :: Parser (Style => 'tree')'. La syntaxe d'objet indirect peut conduire à des bogues bizarres. – cjm

Répondre

5

est ici une version simpliste:

use strict; 
use warnings; 

sub printElement 
{ 
    my ($tag, $content) = @_; 

    if (ref $content) { 
    # This is a XML element: 
    my $attrHash = $content->[0]; 

    print "<$tag>";   # I'm ignoring attributes 

    for (my $i = 1; $i < $#$content; $i += 2) { 
     printElement(@$content[$i, $i+1]); 
    } 

    print "</$tag>"; 
    } else { 
    # This is a text pseudo-element: 
    print $content;    # I'm not encoding entities 
    } 
} # end printElement 

sub printTree 
{ 
    # The root tree is always a 2-element array 
    # of the root element and its content: 
    printElement(@{ shift @_ }); 
    print "\n"; 
} 

# Example parse tree from XML::Parser: 
my $tree = 
    ['foo', [{}, 'head', [{id => "a"}, 0, "Hello ", 'em', [{}, 0, "there"]], 
      'bar', [ {}, 0, "Howdy", 'ref', [{}]], 
      0, "do" 
      ] 
    ]; 

printTree($tree); 

Cela n'imprime pas les attributs, bien que vous puissiez y accéder via $attrHash. Il n'encode pas non plus les entités dans le texte, de sorte que la sortie qui en résulte ne sera probablement pas un fichier XML bien formé. Je laisse ceux-ci comme des exercices pour le lecteur. :-)

+0

Bon travail mate. Je vais le modifier pour mon besoin. Merci. –

Questions connexes