2017-02-14 47 views
-3

私はCSVファイルを解析してXMLに変換しようとしています。 .csvファイルはカンマで区切られたエントリのリストで構成されています。したがって、2つのサンプルエントリは次のようになります。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 :: Document](http://)を使用する[XML :: LibXML](http://search.cpan.org/dist/XML-LibXML/LibXML.pod) 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

あなたのデータを整理したいと思う_how_を考え出す必要があります。あなたの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

関連する問題