2009-05-24 6 views
2

Je dois analyser du xml avec l'analyseur Java SAX. Comme j'étais occupé, j'ai vu que le modèle d'état pourrait être utilisé ici.Modèle d'état avec SAX

Des états clairs et des transitions d'état sont définis, ressemblant à la structure du document xml.

Pour implémenter le modèle d'état, je dois définir une interface (ou classe abstraite). Les méthodes d'interface les plus évidentes sont:

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

Mais le problème que je rencontre est de savoir comment retourner l'information. J'ai besoin de l'information de plusieurs niveaux dans le document xml dans une structure.

Ceci est une partie du document 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> 

est mon hypothèse juste que les motifs de l'État s'intègre ici? Et si oui, quelle est la meilleure façon de l'implémenter ici?

+0

au lieu du motif d'état, pourquoi n'utilisez-vous pas simplement des API qui permettent un accès aléatoire? –

Répondre

2

Votre interface pourrait être implémentée par des classes dont les instances "accumulent en interne" les informations spécifiques requises, et ajouter d'autres méthodes pour rendre ces informations accessibles.

Cependant, il est difficile d'avoir des méthodes "get the info" à usage général, puisque les types peuvent varier; Cette approche peut ne pas convenir au principal avantage des approches de type SAX, à savoir la capacité d'effectuer des actions de manière incrémentielle au fur et à mesure de l'analyse, plutôt que d'accumuler des informations pendant l'analyse. vous analysez des documents extrêmement volumineux). Donc, je ne considérerais pas cela comme un moyen "canonique" d'utiliser SAX en Java, tout comme une variante qui peut être utile une fois de temps en temps.

+0

Vous m'avez fait réfléchir. Je pourrais juste passer une classe à chaque méthode de la classe d'état, et les stateclasses pourraient juste changer cette classe. Même avec l'approche normale de SAX, vous devez garder un certain état. – Ikke

0

Je pense que le modèle d'état s'adapte juste ici. Il doit y avoir un état gardé, pour savoir où vous êtes dans le document.

Pour rassembler les informations, vous pouvez passer un objet à chaque méthode des statistiques, afin qu'elles puissent y placer leurs informations.

À moins qu'il y ait un autre problème auquel je n'ai pas pensé, je pense que c'est la meilleure solution.

Questions connexes