Parcourir un document xml avec xom

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

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.