2016-03-11 55 views
0

我使用perl和XML :: Simple來打印XML文件的內容。 但是,XML文件的結構阻止我列出所有條目,因爲我無法找到循環嵌套數組的正確方法。任何人都可以幫助我,並展示如何做到這一點?Perl XML ::使用嵌套數組的簡單

的XML結構是這樣的:

<header> 
<rows> 
    <row> 
    <elem>a</elem> 
    <elem>b</elem> 
    <elem>c</elem> 
    </row> 
    <row> 
    <elem>d</elem> 
    <elem>e</elem> 
    <elem>f</elem> 
    </row> 
</rows> 
</header> 

我的計劃是這樣的:

my $infile = test.xml; 
my $xml = new XML::Simple (KeyAttr=>[]); 
my $main = $xml->XMLin("$infile",SuppressEmpty => ''); 

我可以用

print "$main->{rows}->{row}->[0]->{elem}[0]\n"; 

和打印所有的條目打印ELEM的單獨條目第n個元素使用

for (@{$main->{rows}{row}}) { 
    print "$_->{elem}[0] \n"; 
} 

這將打印

a 
d 

但是我怎麼打印:

a;b;c; 
d;e;f; 

感謝您的任何答案。

回答

0
print join ';', @{ $_->{elem} }, "\n"; 
2

我將開始與"don't use XML::Simple" - 我很喜歡XML::Twig作爲一個很好的和易於使用的替代品。 (XML::LibXML也不錯,但更多的是學習曲線的位):

#!/usr/bin/env perl 
use strict; 
use warnings; 
use XML::Twig; 

my $xml = XML::Twig -> parsefile ($infile); 

foreach my $row ($xml -> get_xpath('//row')) { 
    print join (";", map { $_ -> text } $row -> children('elem')),"\n"; 
} 

打印:

a;b;c 
d;e;f 

(展開爲清楚起見的循環:

foreach my $row ($xml -> get_xpath('//row')) { 
    foreach my $elem ($row -> children ('elem')) { 
     print $elem -> text, ";"; 
    } 
    print "\n"; 
} 
+0

謝謝,完美地工作! – Adiveara