2009-08-25 6 views
1

J'ai une question relativement générale concernant SAX. Je comprends comment cela fonctionne, et basé sur les tutoriels que j'ai lus, j'ai appris à garder l'état en ayant une tonne de membres de données comme inNode qui sont des booléens et puis dans chaque gestionnaire d'événements, vérifie chaque booléen et gère les paramètres en conséquence .SAX Code Efficacité

Pour moi, cela semble vraiment inefficace, y at-il un moyen plus efficace ou est-ce juste la nature de SAX?

Merci, Chris

+0

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

Répondre

2

Souvent, vous pouvez conserver l'état en ayant une simple pile de tags.

Lorsque vous entrez un nœud, vous appuyez sur.

Lorsque vous quittez un noeud, vous ouvrez.

Parfois, c'est mieux que beaucoup de booléens. Au lieu de cela, vous examinez la pile pour voir si le contexte correct est en place pour préserver les données analysées.

+0

Ah c'est vraiment créatif. Je pense que cela rendrait le code beaucoup plus propre, même si vous auriez probablement encore besoin d'un tas de blocs if/else? Sauf si vous êtes vraiment créatif et avez une sorte d'architecture de gestionnaire stockée dans un hashmap avec la clé comme nom de nœud .... –

+0

Rarement avez-vous un "tas" de blocs if/else. Habituellement, vous faites une correspondance XPath du contexte actuel pour voir si vous voulez le conserver. Puisque le contexte est une pile (une liste en Python), la comparaison est triviale. Dans d'autres langues, comparer une pile à un modèle de modèle peut être un peu difficile, mais c'est une expression plus régulière ou une correspondance XPath qu'autre chose. –

+0

C'est toujours mieux qu'un tas de booléens - en fait, je trouve impossible d'imaginer utiliser SAX sans une sorte de pile. –

0

Voilà comment fonctionne SAX. Il a été conçu pour une faible utilisation de la mémoire et un traitement plus simple. Si votre code devient trop complexe, vous pouvez utiliser le modèle DOM à la place.

+0

Assez bien, merci! –

+0

Une autre option qui est plus efficace que DOM ou SAX est VTD-XML –

Questions connexes