• ベストアンサー

perl初心者です。

すみません、xmlファイルからCSVファイルに変換するプログラムを作成しなくてはいけないのですが、 perlを1からあまり書いた事がないので イメージがわきません。 何か参考になるページをネットで探してるのですが、 どなたか参考になりそうなHPをご存じでしたら URLを教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

XML ファイルの各 item 行が 1 行、各 name の現れる順が毎回同じ、かつ value にカンマ、クウォートなどが含まれないなら、$line に各行を読み込めば、単純に以下で $train にカンマ区切りの文字列ができ上がります: if ($line =~ /<item name="(.+)"><value>(.*)<\/value><\/item>/) { $train .= $2 . ","; } 場合によって現れない name がある、item の順が異なる場合があるなどの場合は、コードを追加しなければなりません。

rariko
質問者

お礼

再度回答ありがとうございました。 参考にさていただきます。

その他の回答 (3)

  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.4

DTD がどう定義しているかにもよりますが、サンプルを見る限りでは、<item>の下の<value> の中が、CDATA だけではなく、もう一度<item>が現れる入れ子になっているので、単純なCSVには吐き出しにくいと思います。 perlでなくていいなら、MS Excel で「読取専用BOOKとして開く」で開けば、適当なスキームで強引に解釈して表にしてくれるので、それをCSV で書き出してやれば、一応CSV にはなります。

rariko
質問者

お礼

回答ありがとうございました。 いちおーperlでという指示があったので・・ 勉強がてら頑張ってみます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

XML::Simple と Text::CSV を使う。 後者はCPANから持ってくる必要がありますが、前者は多分 Perlがインストールされていれば標準で入っているかと。 自分でごりごり書くよりはモジュールを活用しましょう。 使い方の説明は、モジュールをインストールすれば perldoc XML::Simple perldoc TEXT::CSV で読むことができます。 CSV→XMLならXML::CSVというそのものずばりのモジュールがあるんですが。処理速度的には自分で正規表現を書いてしまったほうが早いようですが、 Perl初心者でそれをやるのは厳しい気もするし、メンテも大変なので その辺はバランスを考えて決めるとよいでしょう。

参考URL:
http://www.affrc.go.jp/ja/rss/csv2rss.html
rariko
質問者

お礼

ご回答ありがとうございました。 参考にさせていただきます。

回答No.1

Perl は文字列処理に優れているので、こういったテキスト変換は簡単ではないかと思ってしまうのですが、実は単純だと思える CSV のほうに (特有の問題を露呈しないための) 決まりが結構いろいろあります: http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm#FileFormat 「問題はそこではない!」という場合は、また返答願います。 http://www.w3.org/XML/

rariko
質問者

補足

回答ありがとうございます。 えっと具体的には 以下の内容みたいなXMLファイルを valueの値をそれぞれ取得してCSVに出力する・・・ という事なんですが、、まずファイルを1行ずつ読み込んで 正規表現等使用してCSVファイルに出力する内容を 編集して、出力・・・みたいになるのかなぁと。 それで、何か参考になるプログラムはないかなぁと思いまして。 すみません、本当にperl初心者なもので・・・。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE record SYSTEM "dcr4.5.dtd"> <record name="sample_dcr_full_input" type="content"><item name="fa_office"><value> <item name="output_path_memo_01"><value>htdocs/office/fa/kantou/atsugi.html</value> </item> <item name="output_path_memo_02"><value>data/kanto</value></item> <item name="is_shown"><value>1</value></item> <item name="office_name"><value>厚木支店</value></item> <item name="post_code"><value>243-0018</value></item> <item name="address_1"><value>神奈川県厚木市中町2-2-20</value></item> <item name="address_2"><value>小田急線本厚木駅北口・有隣堂前</value></item> <item name="phone_number"><value>(046)224-8666</value></item> <item name="phone_comment"><value></value></item> <item name="fair_info"> <value> <item name="left"> <value> <item name="date"><value>2006-06-17</value></item> <item name="start"><value>午前</value></item> <item name="s_hour"><value>10</value></item> <item name="s_min"><value>00</value></item> <item name="finish"/> <item name="f_hour"/> <item name="f_min"/> </value> </item> <item name="notice"><value>説明会場は4階です。エレベーターで直接お越しください。</value></item> <item name="map_alt"><value>地図画像(厚木支店)</value></item> <item name="map_comment"><value>地図コメントはHTMLに表示されませんが、注意事項と同様に入力可狽ナす。</value></item> </value></item></record>

関連するQ&A

専門家に質問してみよう