0

バックグラウンド:

最近、HTML フォームから大量のデータを解析し、それを実行可能なデータベース テーブルに構築するという任務を負っています。問題の HTML ページはかなり前に生成されたものであり、元のソース データは長い間失われています。そこで、Java のクイック パーサーを捨てて、このデータを取得して適切にフォーマットすることにしました。階層を変更する必要はまったくなく、必要なのは 1 つのパスだけなので、SAX を活用します。HTML の非常に小さなサンプルを以下に示します。

<html>
 <table>
  <tr>
   <table>
    <tr>
     <td><div>District 1</div><td></tr>
    <tr>
     <td><div>Valid Code 1</div></td>
     <td><div>Valid Code 2</div></td>
     <td><div>Valid Code 3</div></td>
    </tr>
   </table>
  </tr>
ETC...

明らかに、HTML には上記で概説したもの以外にも多くの機能がありますが、これで構造のアイデアが得られるはずです。

質問:

私は、SAX パーサーを使用して XML 階層内の現在の位置を追跡する、インテリジェントで、拡張可能で、自己文書化が可能で、(可能であれば) 高速で無駄のない方法を探しています。SAX を使用して、1 つの要素に対してのみトリガーされる 3 つの個別のメソッド呼び出しがあるため、この状態は永続的で格納可能でなければなりません。これを行うための明白で最も簡単な方法は、ブール変数の山です。多数のフラグを維持するためにビットマスキングも検討しましたが、それは自己文書化や拡張性がほとんどありません。最後に、Finite State Automata (または Pushdown Automata などの別の同様の派生物) を検討しましたが、それらは 1 回限りのものとしてはやや過剰に思えます。

おそらく、私は 1 回限りのコードの問題を考えすぎているのかもしれませんが、1 回限りではないコードを書かなければならないときのために、自分のスキル セットを拡張しようと常に考えています。どうぞよろしくお願いいたします。

参考文献:

http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/

大規模なネストされた switch ステートメントの設計パターン (XML とは直接関係ありませんが、多数の個別の条件を使用して設計するためのアイデアを提供します)

4

1 に答える 1

0

構造体のスタックを保持し、{element, count}それぞれについて、親構造体と新しい要素をstartElement()インクリメントし、上で.countpushendElement()pop

そうすれば、特定のドキュメント内で一意の場所を保持し、XPath のように構築することができます/html/table/tr[23]/td[1]。または、より高速ですが、より多くのメモリを消費する可能性があるため、現在のスタックをコピーできます。

于 2013-06-22T19:51:48.323 に答える