2009-08-18 5 views
1

Je voudrais analyser de gros fichiers XML et lire dans un nœud complet à la fois à partir de Java. Les fichiers sont trop volumineux pour être placés dans un arbre. Je voudrais utiliser un analyseur de tirage si possible, car il semble être plus facile à programmer. Compte tenu des données XML suivantes
Au lieu d'avoir à vérifier chaque événement en utilisant l'analyseur StAX Je voudrais chaque appel à hasNext ou une fonction similaire à renvoyer un objet contenant les informations complètes sur un nœud d'enregistrement. Lorsque j'utilise Perl XML :: LibXML :: Reader me permet de le faire en utilisant sa méthode de lecture, donc je cherche un équivalent en Java.Lecture de gros fichiers XML un nœud à la fois en Java avec un analyseur de pull?

Répondre

2

Commons Digester est vraiment bon pour ce type de problème. Il vous permet de configurer des règles d'analyse dans lesquelles, lorsque l'analyseur rencontre certaines étiquettes, il effectue une action (par exemple, appelle une méthode usine pour créer un objet). Vous n'avez pas besoin d'écrire de code d'analyse, ce qui rend le développement rapide et léger.

Ci-dessous est un modèle simple d'exemple, vous pouvez utiliser:

<pattern value="myConfigFile/foos/foo"> 
    <factory-create-rule classname="FooFactory"/> 
    <set-next-rule methodname="processFoo" paramtype="com.foo.Foo"/> 
</pattern> 

Lorsque l'analyseur rencontre la balise « foo » il appellera createObject(Attributes) sur FooFactory, qui va créer un objet Foo. L'analyseur appelle ensuite le processFoo sur l'objet situé en haut de la pile Digester (vous devez généralement appuyer sur la pile avant de commencer l'analyse). Vous pouvez donc implémenter processFoo pour ajouter ces objets à une collection, ou si votre fichier est trop gros, il suffit de traiter chaque objet à mesure qu'il arrive et de le jeter.

1

Essayez XML Pull Parser

+0

je l'utiliser, mais il ne ressemble pas à elle est activement maintenue. – Jared

Questions connexes