2016-05-09 9 views
5

के साथ पर्ल में सरल, मेरे पास एक DEMO.xml फ़ाइल इस तरह दिखती है।एक्सएमएल :: मिश्रित एक्सएमएल फ़ाइल

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

मैं जान सकती हूँ कि अगर मैं बस की सामग्री के प्रिंट आउट:

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

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

और यहाँ मैं क्या मिला है:

<?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> 

यह इस फ़ाइल को पार्स करने के लिए अपने पर्ल कोड है एक्सएमएल टैग, मुझे क्या करना चाहिए?

उम्मीद उत्पादन लग सकता है जैसे:

123456 
654321 
acdefg 
heloworld 
perlprogramming 

बहुत बहुत शुक्रिया!

एलेक्स

उत्तर

7

नियम XML::Simple का उपयोग कर में से एक: Don't, use something else.

मैं XML::Twig पसंद है और आपकी समस्या को इस तरह दिखता है:

#!/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

बहुत बहुत शुक्रिया – AlexPham

2

हाँ। एक्सएमएल :: सरल का प्रयोग न करें।

मैं इसे XML :: LibXML और 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()'); 

करता है कौन सा:

$ perl xml2text test.xml 

123456 
654321 
abcdefg 
heloworld 
perlprogramming