データベースからの検索結果をCSV形式でダウンロード

OTN-J掲示板に書き込みがあったので、ちょっと試してみました。
極力コーディングしない方法を、、と思って考え付いたのが、

  • XSQL データを検索し、XML 形式で出力
  • XSL で CSV に変換

という方法です。

XSQLの作成

  1. 新規ギャラリから「General-XML」の XSQL File を選択
    XSQLファイルがエディタに開かれます。
  2. コンポーネント・パレットから「Query」を選択して、 タグの内部にドロップ
    ウィザードが起動します。
    1. 最初のページでは、"null-indicator" を YES にしておきます。
      (検索結果がNULLの場合でもXMLタグを出力するようにしたいため)
    2. 次のページでは、DB接続を指定します。
    3. 最後のページでは、SQL を直書きし、終了を押します。次のようなタグが記述されます。

select * from dept

この時点で実行できます。実行すると、IEでは、XML形式で検索結果が出力されることを確認できます。

CSV変換用XSLの作成

  1. 新規ギャラリから「General-XML」の XSLスタイルシートを選択
  2. エディタで次のように記述します。
<?xml version='1.0' encoding='Shift_JIS'?>

<xsl:output omit-xml-declaration="yes" encoding="windows-31j"
            media-type="text/comma-separated-values"/>
  
  <!-- 一行分の出力: ここから -->
    
      <!-- 列の数だけ反復処理 -->
      ,
    
<!-- 改行 -->


  <!-- 一行分の出力: ここまで -->
  

ファイル名 csv.xsl として保存します。

XSQLへのXSLの適用

  1. XSQLの最初のほうに次の一文を追加します
<?xml-stylesheet type="text/xsl" href="csv.xsl" ?>

再度、XSQL を実行すると、CSVでファイルをダウンロードするようになります。*1

*1:実行時に "XSQL-004: Could not acquire a database connection named: xxxx" というようなエラーが発生する場合は、データベース接続定義がうまく設定されていないことが原因です。
データベース接続定義は、jdev\systemXXXX\XSQLconfig.xmlタグで定義します