- PR -

XMLファイルの中身を高速に検索したり、部分的に読み込むには?

投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2005-10-17 10:49
皆さんアドバイスありがとうございます。

>maruさんがどのようなXMLに対してどのような検索が必要なのかによって変わってくる
>でしょうが、参考になれば幸いです。

もう少し付け足すと、あるフォルダ以下(さらにサブフォルダにも)にXMLファイルが
点在しています。

XMLファイルそのものは、ヘッダと明細のような感じになってまして、明細部はツリー
構造で比較的大きな構造になるものもあります。

その、フォルダ以下を再帰呼び出しでグルグルとまわしながらXMLファイルを検索して、
ファイルが見つかれば、ヘッダの一部分を読み込んで、リストビューに表示するという
ことを繰り返す、高速(というか効率よく)にヘッダ内容の一覧表示を行いたいのです。

したがって、XML文書をDBに保存する方法というわけではなく、件名のとおりXML
ファイルそのものを効率よく部分的に読み込む方法を探しています。

その一覧表示においてはXMLファイルで必要な部分はヘッダ部のみなので、XML全体を
読みこむのはかなり非効率で、かといってXMLのタグを一個一個読み込み判別するクラス
をXML文書の種類ごとに用意するのも大変なため、何か簡単にXML文書の一部分だけを
読み込みインスタンス化する方法は無いかなと思い質問しました。

XML文書の性質上、タグの有無や登場場所が不定なので、タグをグルグルと読み込み
必要有無を判別するロジックをそれぞれのクラスで用意する必要があるのでしょうか?

karajan
ベテラン
会議室デビュー日: 2002/07/05
投稿数: 89
投稿日時: 2005-10-17 11:44
該当要素の子要素を検索条件にしているわけでもなく、単純に該当要素名のみで抽出したいのであれば、やっぱりXmlReaderでまわして要素名で判断して抽出するの効率がいいです。
コードの長さでいえばDOMのSelectNodesの方が短くてすみますが、基本的にDOMで読み込むと元文書の3〜4倍のメモリを食ってしまいます。XmlReaderなら規定の読み込み時のバッファは確か4KB(だったと思う)なんで読むだけなら効率は断然いいですね。

Xmlファイルごとに目的の要素名が異なるんであれば、それぞれに対応するコードが必要になります。

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