本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

コンマ区切り値の構文解析

Doug Tidwell (dtidwell@us.ibm.com), developerWorks staff
Doug Tidwell 氏は IBM のシニア・プログラマーです。氏はレーガン大統領の時代から長きにわたってコードを書き続けています。氏は Java コードを 1950 年代後半から書き続けていると主張していますが、氏が生まれたのが 1960 年代半ばであるため、多くの人が氏の主張を疑っています。氏のサイバー・エバンジェリストとしての職務は、顧客が新しいテクノロジーを評価して取り入れるよう援助することです。氏は、給料全額をトリュフチョコで支払うという特別な合意事項を雇用主との間で交わしています。氏の連絡先はdtidwell@us.ibm.com です。

概要: あるエキスパートからの質問: XML パイロット・プロジェクトでの私の役割は、コンマ区切りファイル (CDF) 形式のデータを顧客が希望する XML 形式に変換することです。ところが、どういうわけか CDF から XML への変換プログラムを紹介した情報がどうしても見つかりません。どうしたらいいでしょうか。--Tom Watson (コンサルタント) Doug Tidwell 氏の回答:解決策があります。まず、使用するデータの入手方法から紹介しましょう。

日付:  2000年 4月 24日
レベル:  初級 この記事の原文:  英語
アクティビティー: 1212 ビュー
お気軽にご意見・ご感想をお寄せください: 


使用するデータの入手方法

使用するコンマ区切り値 (CSV) のファイルを作成するために、私は DB2 製品に付属の従業員レコードのサンプル・データベースに対して DB2 の EXPORT コマンドを使いました。コマンドは次のとおりです。

EXPORT to test.csv of DEL select * from employees

こうしてファイルtest.csv が生成されました (このファイルをダウンロードできます)。

コンマ区切り値 (CSV) ファイルの構文解析

カラー・コーディングの試み

現在 developerWorks で実験中の色付きコード・リスティングについて、この記事で紹介しましょう。カラー・コード・リスティングを生成するために、私はいくつかのオープン・ソース・ツールを使用しています。まず、Java、HTML、XML などの文書を Emacs にロードします。Emacs はキーワード、コメント、関数名、その他のプログラム言語構成など、合わせて 10 種類以上の色を定義します。Emacs がファイルをロードして色を付けた後、HTMLize パッケージ (よく知られた Emacs Lisp 言語で書かれたオープン・ソース・ユーティリティー) を使用します。HTMLize は Emacs で表示されるのと厳密に同じようにリスティングを取り入れて、それを HTML に変換します。その結果、キーワード、コメント、関数名などをわかりやすく表示した、さまざまな色の付いたファイルが生成されます。

このように新しく改善されたコード・リスティングに関するご意見をお寄せください。

こうした操作をご自分でお試しになりたい読者は、参考文献の該当するリンク先をご覧ください。

データ・ファイルを入手した後、私はコンマ区切り値を構文解析するコードをいろいろと捜してみました。私がまさに必要とするコードそのものは見付からなかったのですが、たまたま Java クラス StreamTokenizer を発見しました。このクラスを利用すれば、ごく基本的なパーサーを簡単に設計できます。トークン間の区切り文字を選択すると、パーサーはファイルを構文解析して値をストリングや整数に変換するほか、ちょっとした便利な機能もいくつか実行します。私の作成したコードを表示またはダウンロードすることができます。

このファイルを実行するために、次のように入力しました。

java csvParser test.csv output.xml

このコマンドによって CSV ファイルを開いて構文解析し、それを XML に変換します。ある従業員の XML は Listing 1 のようになります。(output.xml としてダウンロードできます。)


リスト 1. The XML output for one employee record from the CSV data sample
                
<?xml version="1.0"?>
<document>
  <row>
    <column1>000010</column1>
    <column2>CHRISTINE</column2>
    <column3>I</column3>
    <column4>HAAS</column4>
    <column5>A00</column5>
    <column6>3978</column6>
    <column7>19650101</column7>
    <column8>PRES</column8>
    <column9>18</column9>
    <column10>F</column10>
    <column11>19330824</column11>
    <column12>52750</column12>
    <column13>1000</column13>
    <column14>4220</column14>
  </row>
  <row>
    <column1>000020</column1>
  ...
</document>

この作業を始めた当初、私は DB2 からの列名が CSV ファイルの第 1 行に含まれるだろうと考え、それらの名前を XML タグ名に使おうとしました。しかし実際にはそのような形式で DB2 データをエクスポートする方法がすぐにわからなかったため、Listing 1 のような仮の命名体系によって自分で列名を作成しました。

生成された XML の変換

さて、このような XML タグ形式のデータが得られたら、次にこの XML をより実用的な (より理解しやすい) タグ・セットに変換する XSLT スタイル・シートを作成する必要がありました。このスタイル・シートの全体を別のウィンドウに表示できます。または、これをダウンロードしてローカルな環境で表示することもできます。

生成された XML 文書をこのスタイル・シートの規則に従って変換し、employees.xml という出力ファイルとして生成するために、次のように入力しました。

java org.apache.xalan.xslt.Process -in output.xml -xsl csv-stylesheet.xsl
-out employees.xml

この変換コードを実行するには Xerces XML パーサーおよびバージョン 1.0.0 の Xalan スタイル・シート・プロセッサーが必要です (参考文献を参照)。このいずれも xml.apache.org から無償で入手できます。実行結果の XML は Listing 2 のようになります。(employees.xml およびemployees.dtd をダウンロードできます。)


リスト 2. XML output of the document converted using csv-stylesheet.xsl
                
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE employees SYSTEM "employees.dtd">
<employees>
  <employee sex="F">
    <serial_number>000010</serial_number>
    <name>
      <first_name>CHRISTINE</first_name>
      <middle_initial>I</middle_initial>
      <last_name>HAAS</last_name>
    </name>
    <department>A00</department>
    <phone>3978</phone>
    <date_of_hire year="1965" month="01" day="01"/>
    <job_title>PRES</job_title>
    <years_of_education>18</years_of_education>
    <date_of_birth year="1933" month="08" day="24"/>
    <salary>52750</salary>
    <bonus>1000</bonus>
    <commission>4220</commission>
  </employee>
  <employee sex="M">
  ...
  </employee>
</employees>


XML から HTML への変換

次に、私は XML 文書を HTML 表に変換する簡単なスタイル・シートを作成しました。 続いて、次のコマンドを実行して図 1 のようなファイルを生成しました (図は実際のファイルの一部です)。

java org.apache.xalan.xslt.Process -in employees.xml -xsl employee-table.xsl
-out etable.xml


表1. スタイル・シートemployee-table.xsl を使って CSV データを変換した結果の HTML 表の抜粋
Employee SexSerial NumberDepartmentJob TitleDate of HireYears of Education
PhoneDate of BirthSalaryBonusCommission Total Compensation
ADAMSON, BRUCEM000150D11DESIGNER02/12/197216
451005/17/1947$25,280.00$500.00$2,022.00 $27,802.00
BROWN, DAVIDM000200D11DESIGNER03/03/196616
450105/29/1941$27,740.00$600.00$2,217.00 $30,557.00
GEYER, JOHN B.M000050E01MANAGER08/17/194916
678909/15/1925$40,175.00$800.00$3,214.00 $44,189.00
GOUNOT, JASON R.M000340E21FIELDREP05/05/194716
569805/17/1926$23,840.00$500.00$1,907.00 $26,247.00
HAAS, CHRISTINE I.F000010A00PRES01/01/196518
397808/24/1933$52,750.00$1,000.00$4,220.00 $57,970.00

この表の全体を別のウィンドウに表示できます。また、HTML ソースを表示することもできます。

この方法によって Tom さんの問題が解決できることを期待しています。今回の件で私自身、学ぶべきことがありました。Tom さんにも何かを学んでいただけたことでしょう。


参考文献

  • XML 文書を変換するには Xerces XML パーサーおよび Xalan スタイル・シート・プロセッサーが必要です。いずれも、xml.apache.org から無償で入手できます。

著者について

Doug Tidwell

Doug Tidwell 氏は IBM のシニア・プログラマーです。氏はレーガン大統領の時代から長きにわたってコードを書き続けています。氏は Java コードを 1950 年代後半から書き続けていると主張していますが、氏が生まれたのが 1960 年代半ばであるため、多くの人が氏の主張を疑っています。氏のサイバー・エバンジェリストとしての職務は、顧客が新しいテクノロジーを評価して取り入れるよう援助することです。氏は、給料全額をトリュフチョコで支払うという特別な合意事項を雇用主との間で交わしています。氏の連絡先はdtidwell@us.ibm.com です。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=296206
ArticleTitle=コンマ区切り値の構文解析
publish-date=04242000
author1-email=dtidwell@us.ibm.com
author1-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。