- PR -

XML文書作成時のパフォーマンスについて

1
投稿者投稿内容
山中 正
ベテラン
会議室デビュー日: 2001/07/30
投稿数: 73
お住まい・勤務地: 大阪府
投稿日時: 2002-02-26 21:32
山中です。こんばんは。

# Javaの会議室とXMLの会議室のどちらに書こうか悩みましたが...

Databaseの値を読み取りながら、新規にXMLドキュメントを作成しようと思っています。
下記のようなコードで書いているのですが、どうもパフォーマンスが芳しくなく、調べてみると、Elementを追加するところあたりに、オーバーヘッドがかかっているよう(※)なのです。

※ System.out.printlnでいろんなところで、時間を書き出して確認しました。

そこで、パフォーマンスを改善したいと悩んでいるのですが、どなたかパフォーマンスを改善するためのアドバイス頂戴できないでしょうか?

なお、XMLのハンドリングにはXerces Java 1.44 を使っています。

コード:
import org.w3c.dom.*;
import org.apache.xerces.dom.*;

  private org.w3c.dom.Document xmlDom = null;

// (中略)

  private void createXMLDOM() {

    JspXmlBeans newsXml = new JspXmlBeans();

    xmlDom = new org.apache.xerces.dom.DocumentImpl();
    Element root = xmlDom.createElement("books");

    Element elmInfo = xmlDom.createElement("book");
    root.appendChild(elmInfo);
    elmInfo.setAttribute("Type","Magazine");

    Element elmTitle = xmlDom.createElement("title");
    Text txtTitle = xmlDom.createTextNode("Notes Domino Magazine 2002-03");
    elmInfo.appendChild(elmTitle);
    elmTitle.appendChild(txtTitle);

    Element elmPrice = xmlDom.createElement("PRICE");
    Text txtPrice = xmlDom.createTextNode("1430");
    elmInfo.appendChild(elmPrice);
    elmPrice.appendChild(txtPrice);
// こんな感じの処理を実際はRDBから読み取った値を使って、
// 順繰りにまわしてます。

    xmlDom.appendChild(root);
  }
}


MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2002-02-27 02:11
こんばんわ
XMLのテキストを得るだけで, CSVテキスト程度の浅い構造なら
テキストの文字列展開付き、あたりが最高速では。
sprintf とか "固定部" + kahenSTR ... StringBuffer とか。
(いまさらLISPでcons みたいなのをチマチマ書きたくない
構造操作が必要なら、DOM かもしれないが、それでも tree型、tree定数
tree演算子くらいプログラム言語に入ってないと行数増えすぎ
正規表現置換のように、1行で書けるXPath置換もほしいです)

次に速いのは、SAX イベントストリームを起こして、SAXライター
で書き出す。

あと、構造の固定度が高ければ、最初にテンプレートのDOMtreeを作って
そこにテキスト値をはめ込んで完成させる、とか、それのXSLT版をする
(スタイルシートをキャッシュしてそこにパラメータ値はめ込みで即変換)
枠の固定部は再使用できるように。or 空枠複製で使い捨てとか

さて、DOMで組み立てずに、RELAXER などのマップ/バインディングで
プログラム言語で組み立て、まとめてテキスト出力の形ではどうか?
0.5DOM速、くらいでしょうか。

テンプレート・エンジンとか言う、タグテキストを作る汎用もあるようす
巨大な sprintf として動作するものは使えます、
Xi,JSPなどの可変部埋め込みとかの系統、 Velocity
http://www.ingrid.org/jajakarta/velocity/velocity-1.1/docs-ja/user-guide.htmll
http://jakarta.apache.org/velocity/user-guide.html

[ メッセージ編集済み 編集者: MMX 編集日時 2002-03-23 09:05 ]
1

スキルアップ/キャリアアップ(JOB@IT)