2017-02-14 186 views
-3

我想解析一個csv文件並將其轉換爲XML。 .csv文件由用逗號分隔的條目列表組成。因此,兩個示例條目如下所示:Perl:將csv文件轉換爲xml

AP,AB,A123,B123,,, 
MA,NA,M123,TEXT,TEXT,TEXT_VALUE 

某些字段在文件中是空白的而文件沒有標題行。 任何建議如何去與此。還沒有想出如何去與此。 謝謝。

+3

使用[Text :: CSV](http://search.cpan.org/~ishigaki/Text-CSV-1.91/lib/Text/CSV.pm)閱讀它,然後使用模塊編寫一個xml文件那。例如,[XML :: LibXML](http://search.cpan.org/dist/XML-LibXML/LibXML.pod),您將使用[XML :: LibXML :: Document](http:// search.cpan.org/dist/XML-LibXML/lib/XML/LibXML/Document.pod)。還有其他模塊,[XML :: Twig](http://search.cpan.org/~mirod/XML-Twig-3.49/Twig.pm)。 [XML :: Writer](http://search.cpan.org/dist/XML-Writer/Writer.pm)曾經很流行,但我對它的瞭解不多,現在也不知道。 – zdim

+2

你需要想出你想要你的數據組織,即。你的xml將如何看待。至於用'XML :: LibXML'編寫,這裏可能有用[SO post](http://stackoverflow.com/a/2934794/4653379),另一個[PerlMonks post](http://www.perlmonks .org /?node_id = 1026789)(這些鏈接不適合上述評論)。 – zdim

+1

這並不難,但XML比CSV複雜得多。所以至少我們需要知道你的XML應該是什麼樣的。 – Sobrique

回答

6
print "<myXML>\n"; 
while (<>) { 
    print "<aRow>$_</aRow>\n"; 
} 
print "</myXML>\n"; 

或者,使用XML ::的libxml,這樣的事情:

#!/usr/bin/perl 

use strict; 
use warnings; 

use XML::LibXML; 

my $doc = XML::LibXML::Document->createDocument; 

my $root = $doc->createElement('myXML'); 
$doc->setDocumentElement($root); 
$root->appendChild($doc->createTextNode("\n")); 

while (<>) { 
    chomp; 
    my $row = $doc->createElement('aRow'); 
    $root->appendChild($row); 
    $row->appendChild($doc->createTextNode($_)); 
    $root->appendChild($doc->createTextNode("\n")); 
} 

print $doc->toString; 

當然,如果你告訴我們,輸出應該是什麼樣子,我們也許可以想出的東西多一點複雜!

+1

技術上正確的是最好的一種正確! – Sobrique

+1

你是一個邪惡的人! +1! – tjd