Tem também o módulo XML::XPath. Imagine o seguinte XML: <Biblioteca>
<Livro ISBN="1234567" Ano="2000">
<Paginas>300</Paginas>
<Titulo>A arte de programar em meia-hora</Titulo>
<Exemplares>
<Codigo>1</Codigo>
<Codigo>2</Codigo>
</Exemplares>
</Livro>
<Livro ISBN="7654321" Ano="1710">
<Paginas>500</Paginas>
<Titulo>Aprenda a usar o ábaco em 21 dias</Titulo>
<Exemplares>
<Codigo>10</Codigo>
<Codigo>20</Codigo>
<Codigo>30</Codigo>
<Codigo>40</Codigo>
</Exemplares>
</Livro>
</Biblioteca>
Ele seria facilmente lido com o módulo XPath da seguinte forma:
#!/usr/bin/perl
use XML::XPath;
my $inputFile = shift;
die("Faltou passar o nome do arquivo!") unless defined($inputFile);
my $xpath = XML:: XPath->new(filename => $inputFile);
my $nodeset = $xpath->find('//Biblioteca/Livro');
foreach my $context ($nodeset->get_nodelist) {
my $isbn = $xpath->findvalue('@ISBN', $context);
print "ISBN: $isbn\n";
my $ano = $xpath->findvalue('@Ano', $context);
print "Ano de Publicação: $ano\n";
my $paginas = $xpath->findvalue('Paginas', $context);
print "Quantidade de Páginas: $paginas\n";
my $titulo = $xpath->findvalue('Titulo', $context);
print "Título: $titulo\n";
my $exemplares = $xpath->find('Exemplares/Codigo', $context);
print "Exemplares disponíveis:\n";
foreach my $newcontext ($exemplares->get_nodelist){
my $codigo = $xpath->findvalue('.', $newcontext);
print "\tCódigo: $codigo\n";
}
} Exemplo e código retirado de: http://perlbrasil.blogspot.com/2011/03/len...-com-xpath.html Abraços.