使用するコンマ区切り値 (CSV) のファイルを作成するために、私は DB2 製品に付属の従業員レコードのサンプル・データベースに対して DB2 の EXPORT コマンドを使いました。コマンドは次のとおりです。
EXPORT to test.csv of DEL select * from employees |
こうしてファイルtest.csv が生成されました (このファイルをダウンロードできます)。
データ・ファイルを入手した後、私はコンマ区切り値を構文解析するコードをいろいろと捜してみました。私がまさに必要とするコードそのものは見付からなかったのですが、たまたま 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 をより実用的な (より理解しやすい) タグ・セットに変換する 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 表に変換する簡単なスタイル・シートを作成しました。 続いて、次のコマンドを実行して図 1 のようなファイルを生成しました (図は実際のファイルの一部です)。
java org.apache.xalan.xslt.Process -in employees.xml -xsl employee-table.xsl -out etable.xml |
表1. スタイル・シートemployee-table.xsl を使って CSV データを変換した結果の HTML 表の抜粋
| Employee | Sex | Serial Number | Department | Job Title | Date of Hire | Years of Education |
| Phone | Date of Birth | Salary | Bonus | Commission | Total Compensation | |
| ADAMSON, BRUCE | M | 000150 | D11 | DESIGNER | 02/12/1972 | 16 |
| 4510 | 05/17/1947 | $25,280.00 | $500.00 | $2,022.00 | $27,802.00 | |
| BROWN, DAVID | M | 000200 | D11 | DESIGNER | 03/03/1966 | 16 |
| 4501 | 05/29/1941 | $27,740.00 | $600.00 | $2,217.00 | $30,557.00 | |
| GEYER, JOHN B. | M | 000050 | E01 | MANAGER | 08/17/1949 | 16 |
| 6789 | 09/15/1925 | $40,175.00 | $800.00 | $3,214.00 | $44,189.00 | |
| GOUNOT, JASON R. | M | 000340 | E21 | FIELDREP | 05/05/1947 | 16 |
| 5698 | 05/17/1926 | $23,840.00 | $500.00 | $1,907.00 | $26,247.00 | |
| HAAS, CHRISTINE I. | F | 000010 | A00 | PRES | 01/01/1965 | 18 |
| 3978 | 08/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 氏は IBM のシニア・プログラマーです。氏はレーガン大統領の時代から長きにわたってコードを書き続けています。氏は Java コードを 1950 年代後半から書き続けていると主張していますが、氏が生まれたのが 1960 年代半ばであるため、多くの人が氏の主張を疑っています。氏のサイバー・エバンジェリストとしての職務は、顧客が新しいテクノロジーを評価して取り入れるよう援助することです。氏は、給料全額をトリュフチョコで支払うという特別な合意事項を雇用主との間で交わしています。氏の連絡先はdtidwell@us.ibm.com です。