2016-05-09 10 views
5

Mam plik DEMO.xml wyglądać tak.XML :: Prosty w perlu, z mieszanym plikiem xml

<?xml version="1.0"?> 
<data> 
<pattern>123456</pattern> 
<pattern>654321</pattern> 
<pattern>abcdefg</pattern> 
<pattern owners="alex">heloworld</pattern> 
<pattern owners="alex">perlprogramming</pattern> 
</data> 

To jest mój kod Perl analizować ten plik

use XML::Simple; 
use strict; 
use Data::Dumper; 

my $xml = new XML::Simple; 
my $data = $xml->XMLin("DEMO.xml"); 
print Dumper($data); 

I tu jest to, co mam:

$VAR1 = { 
      'pattern' => [ 
         '123456', 
         '654321', 
         'abcdefg', 
         { 
         'owners' => 'alex', 
         'content' => 'heloworld' 
         }, 
         { 
         'owners' => 'alex', 
         'content' => 'perlprogramming' 
         } 
        ] 
     }; 

mogę wiedzieć, czy ja po prostu wydrukować treść tag xml, co mam zrobić?

oczekiwany wynik może wyglądać tak:

123456 
654321 
acdefg 
heloworld 
perlprogramming 

Dziękuję bardzo!

Alex

Odpowiedz

7

Zasada jednym z użyciem XML::Simple: Don't, use something else.

Lubię XML::Twig i problem wygląda następująco:

#!/usr/bin/perl 

use strict; 
use warnings; 

use XML::Twig; 

my $twig = XML::Twig -> new -> parsefile('DEMO.xml'); 
foreach my $pattern ($twig -> get_xpath ('//pattern')) { 
    print $pattern -> text,"\n"; 
} 
+0

Dziękuję bardzo – AlexPham

2

Tak. Nie używaj XML :: Simple.

Zrobiłbym to z XML :: LibXML i odrobiną XPath.

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use XML::LibXML; 

my $parser = XML::LibXML->new(); 
my $doc = $parser->parse_file(shift); 

print $doc->findvalue('//text()'); 

która robi to:

$ perl xml2text test.xml 

123456 
654321 
abcdefg 
heloworld 
perlprogramming 
Powiązane problemy