2009-08-25 14 views
1

私はSAXに関して比較的一般的な質問があります。どのように動作するのか、私が読んだチュートリアルに基づいて、inNodeのような大量のデータメンバーをブール値にして、各イベントハンドラで各ブール値をチェックし、それに応じてパラメータを処理することによって状態を維持する方法を学びました。SAXコード効率

私にとっては、これは実際には効率が悪いようですが、効率的なやり方があるのか​​、それともSAXの性質なのでしょうか?

おかげで、 クリス

+0

try http://code.google.com/p/jlibs/wiki/SAX2JavaBinding –

答えて

2

多くの場合、単純なタグのスタックを持つことで状態を維持できます。

ノードに入ると、を押します。

ノードを離れるときにポップします。

時にはこれは多くのブーリアンより優れています。その代わりに、スタックを調べて、解析中のデータを保存するための正しいコンテキストが存在するかどうかを確認します。

+0

ああ、それは本当に創造的です。私はコードをもっときれいにするだろうと思っていますが、if/elseブロックがたくさんある必要はありますか?あなたが本当に創造的で、ハンドラアーキテクチャがハッシュマップに格納されていて、ノード名としてキーを持っていない限り... –

+0

if/elseブロックの束はほとんどありません。通常は、現在のコンテキストのXPathのようなマッチングを行い、それを保存したいかどうかを確認します。コンテキストはスタック(Pythonのリスト)なので、比較は簡単です。スタックをテンプレートパターンと比較する他の言語では、少し難しいかもしれませんが、他のものよりも正規表現やXPathマッチングがより多くあります。 –

+0

これは常にブーリアンの束よりも優れています - 実際には、SAXを何らかのスタックなしで使用することは想像もできません。 –

0

これは、SAXの仕組みです。メモリ使用量が少なく、処理が簡単になるように設計されています。コードが複雑すぎる場合は、代わりにDOMモデルを使用することができます。

+0

十分に感謝! –

+0

DOMやSAXよりも効率的な別のオプションは、VTD-XML –