2016-05-23 6 views
-4
<?xml version="1.0" encoding="UTF-8"?> 
<Document> 
    <DataElement> 
     <Serial_Start>1000</Serial_Start> 
     <Serial_End>2000</Serial_End> 
     <Item value="257896"> 
      <ComItemation> 
       <Price>00</Price> 
       <Sku>20</Sku> 
       <Qcode>27</Qcode> 
      </ComItemation> 
      <ComItemation> 
       <Price>80</Price> 
       <Sku>20</Sku> 
       <Qcode>20</Qcode> 
      </ComItemation> 
     </Item> 
     <Item value="523698"> 
      <ComItemation> 
       <Price>00</Price> 
       <Sku>20</Sku> 
       <Qcode>27</Qcode> 
      </ComItemation> 
      <ComItemation> 
       <Price>80</Price> 
       <Sku>20</Sku> 
       <Qcode>20</Qcode> 
      </ComItemation> 
     </Item> 
     <Item value="856987"> 
      <ComItemation> 
       <Price>00</Price> 
       <Sku>20</Sku> 
       <Qcode>27</Qcode> 
      </ComItemation> 
     </Item> 
    </DataElement> 
    <DataElement> 
     <Serial_Start></Serial_Start> 
     <Serial_End></Serial_End> 
     <Item value="123456"> 
      <ComItemation> 
       <Price>00</Price> 
       <Sku>20</Sku> 
       <Qcode>27</Qcode> 
      </ComItemation> 
      <ComItemation> 
       <Price>80</Price> 
       <Sku>20</Sku> 
       <Qcode>20</Qcode> 
      </ComItemation> 
     </Item> 
     <Item value="123456"> 
      <ComItemation> 
       <Price>00</Price> 
       <Sku>20</Sku> 
       <Qcode>27</Qcode> 
      </ComItemation> 
      <ComItemation> 
       <Price>80</Price> 
       <Sku>20</Sku> 
       <Qcode>20</Qcode> 
      </ComItemation> 
     </Item> 
     <Item value="123456"> 
      <ComItemation> 
       <Price>00</Price> 
       <Sku>20</Sku> 
       <Qcode>27</Qcode> 
      </ComItemation> 
      <ComItemation> 
       <Price>80</Price> 
       <Sku>20</Sku> 
       <Qcode>20</Qcode> 
      </ComItemation> 
     </Item> 
    </DataElement> 
</Document> 

私は上記のXML文書を解析しようとしていましたが、PERLの新しい蜂です。 I は、下記の形式で出力する必要があります。XML文書の構文解析

Serial Start : 1000 
Serial End : 2000 
Item : 257896 
Price : 00 
Sku : 20 
Qcode : 27 
Item : 257896 
Price : 80 
Sku : 20 
Qcode : 20 

...そして、各子ノードについてそうです。これまで

サンプルコード:

#!/usr/bin/env perl 
use strict; 
use warnings; 

use XML::Simple; 
use Data::Dumper; 
my $xml = new XML::Simple; 
my $data = $xml->XMLin("/home/rocky/PERL/doc.xml"); 
print Dumper($data); 

foreach my $imgrec (@{ $data->{DataElement} }) { 
    my $Serial_Start = $imgrec->{Serial_Start}; 
    my $Serial_End = $imgrec->{Serial_End}; 
    foreach my $imgrec1 (@{ $data->{DataElement}->{Item} }) { 
     ## Not sure of this code 
     ## Trying on this part. 
    } 
} 
+0

お試しください。 'XML :: Twig'を使うのはそれほど難しいことではありません。それから問題があるかどうか聞いてみましょう。 – Sobrique

+0

' strictを使用します。 警告を使用します。 XML :: Simpleを使用します。 Data :: Dumperを使用します。 my $ xml = new XML :: Simple; my $ data = $ xml-> XMLin( "/ home/rocky/PERL/doc.xml"); 印刷Dumper($ data); my $ Serial_Start = $ imgrec - > {Serial_Start}; foreach my $ imgrec(@ {$ data - > {DataElement}} my $ Serial_End = $ imgrec - > {Serial_End};この部分にしよう({> {}項目のデータ - - > {定義するDataElement}} @){ \t \t ## \t \tこのコードのわからない## \t foreachの私の$ imgrec1。 \t} }「 – vmadhav

+0

あなたの質問にはそれがあります。 – Sobrique

答えて

1

OKは、ので、ここで問題です:

use XML::Simple; 

しないでください - それは、あなたの人生難しくなります。

ここXML::Twigを使用して10のためのスターターだ - それはそう、あなたが後にしている出力を得るために何をしているのか完全には明らかではありません。

#!/usr/bin/env perl 
use strict; 
use warnings; 

use XML::Twig; 

my $twig = XML::Twig-> new -> parsefile('/home/rocky/PERL/doc.xml') 
foreach my $data_element ($twig->findnodes('//DataElement')) { 
    print "Start:", $data_element->first_child_text('Serial_Start'), "\n"; 
    print "End:", $data_element->first_child_text('Serial_End'), "\n"; 
    foreach my $item ($data_element -> children('Item')){ 
     print "Item: ", $item -> att('value'),"\n"; 
     foreach my $tag (qw (Price Sku Qcode)) { 
      print "$tag: ", $item -> findnodes (".//$tag", 0) -> text,"\n"; 
     } 
    } 
} 

注 - これは、Aの最初のインスタンスを見つけましたアイテムの下にある特定のタグ。すべてではありません。