IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Parsing fichier xml problème [JDOM]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut Parsing fichier xml problème
    Bonjour à tous,

    j'ai un petit problème lorsque j'essaye de parser mon fichier xml. J'utilise JDOM et je l'ouvre avec SAXBuilder.

    Voici la forme de mon XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
    <photos_getAlbums_response xmlns="http://xxxxx.com"  list="true">
      <album>
        <aid>11352</aid>
        <owner>9437473209</owner>
        <name>mon album</name>
        <description/>
        <location/>
        <size>2</size>
      </album>
    </photos_getAlbums_response>

    et voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     SAXBuilder sxb = new SAXBuilder();
    			      try
    			      {
    			         //On crée un nouveau document JDOM avec en argument le fichier XML
    			         //Le parsing est terminé ;)
     
    			         document = sxb.build(new File("retour.xml"));
     
     
    			      }
    			      catch(Exception e){}
     
    			      //On initialise un nouvel élément racine avec l'élément racine du document.
    			      racine = document.getRootElement();
     
    			      System.out.println("racine : " + racine.getText());
     
    			      List listAlbums = racine.getChildren("album");
     
     
    			      //On crée un Iterator sur notre liste
    			      Iterator i = listAlbums.iterator();
    			      while(i.hasNext())
    			      {
    			         //On recrée l'Element courant à chaque tour de boucle afin de
    			         //pouvoir utiliser les méthodes propres aux Element comme :
    			         //selectionner un noeud fils, modifier du texte, etc...
    			         Element courant = (Element)i.next();
     
    			         //On affiche le nom de l'element courant
    			         System.out.println(courant.getChild("name").getText());
    			      }

    Je n'ai rien dans la variable racine. Quand je fais du debug, je remarque que ma variable document contient :

    [Document: No DOCTYPE declaration, Root is [Element: <photos_getAlbums_response [Namespace: "http://xxxxx.com]/>]]
    Merci d'avance !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Ton xml déclare un namespace (ici : http://xxxxx.com ), il faut donc l'utiliser sachant que les noeud fils hérite du namespace de leur père.
    Faut donc utiliser cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.util.List getChildren(java.lang.String name, Namespace ns)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Citation Envoyé par Morbo Voir le message
    Ton xml déclare un namespace (ici : http://xxxxx.com ), il faut donc l'utiliser sachant que les noeud fils hérite du namespace de leur père.
    Faut donc utiliser cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.util.List getChildren(java.lang.String name, Namespace ns)
    Salut, merci pour ton explication, mais même en rajoutant ce que tu m'as dit et en déclarant le namespace qui convient, toujours le même problème...


    Le problème ne viendrait-il pas de document ? Sachant qu'il contient que la première ligne de mon fichier xml :

    [[Element: <photos_getAlbums_response [Namespace: http://api.bebo.com/1.0/]/>]]

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    T'as essayé avec le namespace http://api.bebo.com/1.0/ ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Citation Envoyé par Morbo Voir le message
    T'as essayé avec le namespace http://api.bebo.com/1.0/ ?
    Oui bien sur, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SAXBuilder sxb = new SAXBuilder();
    				      try
    				      {
    				         //On crée un nouveau document JDOM avec en argument le fichier XML
    				         //Le parsing est terminé ;)
    				         document = sxb.build(new File("retour.xml"));
     
     
    				      }
    				      catch(Exception e){}
     
    				      //On initialise un nouvel élément racine avec l'élément racine du document.
     
    				      racine = document.getRootElement();
    				      Namespace ns = Namespace.getNamespace("http://api.bebo.com/1.0/");
    				      System.out.println("racine : " + racine.getChildren("album", ns));
    voici ce que j'obtiens dans racine :

    racine : [[Element: <album [Namespace: http://api.bebo.com/1.0/]/>], [Element: <album [Namespace: http://api.bebo.com/1.0/]/>]]
    Mais quand je fais du debug, la variable document ne contient pas tout le fichier xml

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Ce que tu obtiens comme fils du noeud "racine" me semble cohérent : 2 noeuds "album".

    Le fait tu n'obtiennes rien en mode debug est peut être parceque le répertoire de travail est différent or l'acces au fichier xml que tu as définis est relatif à ce dernier.
    D'autre part, tu catch une exception sans la traiter (pas bien) donc quand tu exécutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getRootElement();
    Tu n'as aucune garantie que le parsing s'est bien passé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/02/2008, 09h24
  2. [ASP][MSXML] visualisation fichier XML problème encoding
    Par RobinNono dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 12/02/2007, 14h30
  3. script pour parsing fichier xml
    Par Melvine dans le forum Modules
    Réponses: 4
    Dernier message: 06/10/2006, 18h47
  4. [JDOM] Couper un fichier XML (problème de OutOfMemory)
    Par zeldoi5 dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 27/09/2006, 11h46
  5. Valider fichier XML : problème avec la DTD
    Par SkIllz2k dans le forum Valider
    Réponses: 2
    Dernier message: 26/04/2005, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo