2009-05-24 5 views
2

私はjavaのSAXパーサーでいくつかのXMLを解析する必要があります。私が忙しかったので、私はここで州のパターンを使うことができることを知りました。SAXの状態パターン

明確な状態と状態遷移が定義されており、XML文書の構造に似ています。

状態パターンを実装するには、インタフェース(または抽象クラス)を定義する必要があります。最も明白なインターフェイスメソッドは、次のようになります。

public void startElement(String elementName); 
public void endElement(String elementName); 

しかし、私が遭遇する問題は、情報を返す方法です。 1つの構造内のxmlドキュメントの複数のレベルからの情報が必要です。

これは

<chessboard> 
    <white> 
     <king> 
       <position> 
        <x>e</x> 
      <y>1</y> 
       </position> 
     </king> 
     <pawns> 
      <pawn id="1"> 
        <position> 
         <x>e</x> 
       <y>2</y> 
        </position> 
      </pawn> 
      <pawn id="1"> 
        <position> 
         <x>f</x> 
       <y>2</y> 
        </position> 
      </pawn> 
     </pawns> 
    </white> 
</chessboard> 

状態パターンがここにフィットする権利というのが私の仮定されるXML文書の一部ですか?もしそうなら、ここでそれを実装する最良の方法は何ですか?

+0

ステートパターンの代わりに、ランダムアクセスが可能なapiを使用するのはなぜですか? –

答えて

2

あなたのインターフェイスは、インスタンスが特定の必要な情報を「内部的に蓄積」しているクラスによって実装でき、その情報にアクセスできるように他のメソッドを追加できます。

しかし、種類が異なる可能性があるため、汎用の「情報を取得する」メソッドを持つことは難しいです。この全体的なアプローチは、構文解析中に情報を蓄積するのではなく、後でしか動作しないように、解析が進むにつれてアクションを徐々に実行する能力であるSAXライクなアプローチの主な利点にはうまく適合しない可能性があります(この利点は、非常に大きな文書を解析しています)。だから、私はJavaでSAXを採用するための "標準的な"方法とは思っていませんが、ちょっと便利になるかもしれない1つのバリエーションと同じです。

+0

あなたは私の考えを持っています。状態クラスの各メソッドにクラスを渡すだけで、状態クラスはそのクラスを変更することができます。 SAXへの通常のアプローチでも、ある状態を維持する必要があります。 – Ikke

0

状態パターンがちょうどいいと思います。あなたが文書のどこにいるのかを知るためには、いくつかの状態が維持されていなければなりません。

情報を収集するために、ステートクラスの各メソッドにオブジェクトを渡すことができるため、情報をそこに入れることができます。

私が考えていない他の問題がない限り、これは最良の解決策だと思います。

関連する問題