Parcourir un document xml avec xom

Soyez le premier à donner votre avis sur cette source.

Vue 11 607 fois - Téléchargée 1 123 fois

Description

o Ce code parcourt un fichier xml
o affiche toute l'arborescence
o trés utiles pour le parsing
o tres facile a utilsé
o tres maniable
+ exemple comment utilisé la classe StringTokenizer

Source / Exemple :


import java.io.*;
import nu.xom.*;
// cette classe ne marche qu'avec xom-1.1.jar

public class xom {

  public static void main(String[] args) {
      Builder builder = new Builder();// nouvelle insatnce du parseur
     // Pensez tout d'abord a initailiser votre pgm, vous pouvrez faire tout 
     // betement args[0] par c:\\votre_fichier.xml
    try {
      File file = new File(args[0]);
      Document doc = builder.build(file);// instance du document XML
      Element root = doc.getRootElement();// saisie de la racine
      listChildren(root, 0);//charger les enfants :) de la racine      
    }
    // error de formatage xml
    catch (ParsingException ex) { 
      System.out.println(args[0] + " n'est pas bien formatter :( ");
      System.out.println(ex.getMessage());
    }  
    catch (IOException ex) { 
      System.out.println(ex);
    }  
  
  }
  
  public static void listChildren(Node current, int depth) {
      Tokeniser t;
      // cette classe peut bien servir a d'autre truc voir Tokeniser.java
      String [] s;
    printSpaces(depth);// cette var je ne sais pas a quoi elle sert!
    String data = "";
    // parcourt des enfants (feuille de l'arborescence)
    if (current instanceof Element) {
        Element temp = (Element) current;
       
            data = ": " + temp.getQualifiedName();
            // getQualifiedName= valeur de la balise,
            // comme on peut aussi saisir les namespace etc
        if (temp.getAttributeCount()>0){
            // cette condition anisi que la boucle servent pour traiter 
            // (manuellement certe) les attribut des identificateurs
            // xml
            for (int i=0; i<temp.getAttributeCount();i++){
                t = new Tokeniser();
                s=t.Tokenizer(temp.getAttribute(i).toString(),"=");
                
                data +="\n" + s[0]+" = "+t.Tokenizer(s[1],"\"")[0];
                
            }
            
        }
         
    }
    else if (current instanceof ProcessingInstruction) {
        ProcessingInstruction temp = (ProcessingInstruction) current;
        data = ": " + temp.getTarget();   
    }
    else if (current instanceof DocType) {
        DocType temp = (DocType) current;
        data = ": " + temp.getRootElementName();   
    }
    else if (current instanceof Text || current instanceof Comment) {
        String value = current.getValue();
        value = value.replace('\n', ' ').trim();
        if (value.length() <= 20) data = ": " + value;
        else data = ": " + current.getValue().substring(0, 17) + "...";   
    }
    // les attributs ne sont jammais retourné par getChild
   
        System.out.println(current.getClass().getName() + data);
    
    for (int i = 0; i < current.getChildCount(); i++) {
      listChildren(current.getChild(i), depth+1);
    }
    
  }
  
  private static void printSpaces(int n) {
    
    for (int i = 0; i < n; i++) {
      System.out.print(' '); 
    }
    
  }

}

Conclusion :


des bug : je ne sais pas 'il y'en a (moi aussi je vient de decouvrir cette api)
sinon s'il y'en a je suis la pour les corrigé ;)
NB: ** moi je travaille avec eclipse, donc je ne l'ai pas tester en mode commande (d'ailleur je me demande si jammais je l'ai fait ! ;))
    • l'api xom-1.1.jar ce n'est pas la peine de la chercher : elle est dans le zip.

merci %.%

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

nadjet24
Messages postés
31
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
8 mai 2008
-
je souhaite avoir un programme qui fait le parcing d'un document XML qui a en entrée un fichier xml et en sortie une arborssence et ensuite faire le parcour de cette arboressence et la transformer en suite en machine à état finis merci c'est urgent.
cs_larsson
Messages postés
41
Date d'inscription
dimanche 16 février 2003
Statut
Membre
Dernière intervention
8 juin 2007
-
Tout a fait d'accord. a la base lorsque j'ai tester le fichier xml se trouve dans le rep courant du projet et dans ce cas ça fonctionne a merveille. sinon ya ta soluce.
merci
userls
Messages postés
1
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
11 avril 2007
-
dans le fichier xom.java, il faut modifier le code de la sorte pour qu'il marche

try {
File file = new File(args[0]);
Document doc = builder.build(file);// instance du document XML
Element root = doc.getRootElement();// saisie de la racine
listChildren(root, 0);//charger les enfants :) de la racine
}

en effet faut que la methode demande une File et non un text
plis fos
cs_larsson
Messages postés
41
Date d'inscription
dimanche 16 février 2003
Statut
Membre
Dernière intervention
8 juin 2007
-
merci, CLUNAJE2, au fait c'est un truc sur le quel je suis tombé par hasard, je l'ai essayé, modifier un peut, et voila. je me suis pas trop intéréssé par les details, mais plutot a partager ma decouverte avec la comunauté.
et désolé si le code source n'est pas bien commenter (un truc fait a la hate).
ciao
clunaje2
Messages postés
1
Date d'inscription
vendredi 27 janvier 2006
Statut
Membre
Dernière intervention
16 août 2006
-
citation :
printSpaces(depth);// cette var je ne sais pas a quoi elle sert!

si tu regarde la dernière méthode du code tu te rends compte qu'en fait, il s'agit juste du formatage pour l'affichage de la structure du fichier xml :
root
rootChil1
rootChild2
child1OfRootChild2
child2OfRootChild2
...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.