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 :

Probleme JDOM Element [JDOM]


Sujet :

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

  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut Probleme JDOM Element
    Bonjour,
    J'ai un petit souci pour parser du XML. J'essaie comme décrit dans les tutos de retransformer le noeud courant en élément mais c'est la que ça coince, j'obtiens ce message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.ClassCastException: org.jdom.Element
    Voici le fichier XML :

    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
     
    <cla>
       <clr>
          <inter>
              <Com Value = ""/>
              <Product Alias = "toto" Preview = ""/>
                  <Mat>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rx"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Ry"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rz"/>
                  </Mat>
              </Product>
              <Product Alias = "titi" Preview = ""/>
                  <Mat>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rx"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Ry"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rz"/>
                  </Mat>
              </Product>
              <Geom Alias = "titi" extr= "-2"/>
                   <Point Ux= "1.0" Uy = "0.0" Uz = "0.0" />
                   <Point Ux= "1.0" Uy = "0.0" Uz = "0.0" />              
              </Geom >
              <Pict Href= "picturekjrer"/>
          </inter>
        </clr>
    </cla>
    et mon code java :

    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
    34
    35
    36
    37
    38
     
    public void parseXml(ArrayList<String> arrXml) throws ParserConfigurationException{
    	// for each xml files found 
    	for(int i=0;i<arrXml.size();i++){				
    		// create a new SaxBuilder instance
    	      SAXBuilder sxb = new SAXBuilder();
    	      try
    	      {
    	         // create a new JDOM document 
    	         document = sxb.build(new File(arrXml.get(i)));
    	      }
    	      catch(Exception e){
     
    	      }
    	      // initialize document's root element
    	      elRoot = document.getRootElement();	      
    	      // Build Query for insertion
    	      buildQueryFromXml();
    	   }
    }
     
     
    static void buildQueryFromXml(){
     
       elClashResults=elRoot.getChild("clr");  
       List listInterferences= elClashResults.getChildren("inter");   
     
       System.out.println("Nb Interferences: "+listInterferences.size());
       // Create an iterator on list
       //Iterator <Element>iterator = listInterferences.iterator();    
       Iterator iterator=listInterferences.iterator();
       while(iterator.hasNext())
       {
       // Create a new element 
       Element child = (Element) iterator.next(); // ca coince ici ..     
     
       }
    }
    Lorsque je change le type de child en objet et que je caste l'objet en string j'affiche [Element: <inter/>]. Pourquoi je n'arrive pas à recaster en élément ..?

    D'avance merci pour votre aide

  2. #2
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Ton fichier n'est pas valide:
    - des tags fermetures (en rouge) pas de tags ouvertures
    - des fermetures trop tot (en bleue).

    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
    <cla>
       <clr>
          <inter>
              <Com Value = ""/>
              <Product Alias = "toto" Preview = ""/>
                  <Mat>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rx"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Ry"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rz"/>
                  </Mat>
              </Product>
              <Product Alias = "titi" Preview = ""/>
                  <Mat>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rx"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Ry"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rz"/>
                  </Mat>
              </Product>
              <Geom Alias = "titi" extr= "-2"/>
                   <Point Ux= "1.0" Uy = "0.0" Uz = "0.0" />
                   <Point Ux= "1.0" Uy = "0.0" Uz = "0.0" />              
              </Geom >
              <Pict Href= "picturekjrer"/>
          </inter>
        </clr>
    </cla>

    Et c'est quoi le message d'erreur?

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par pingouinos_64 Voir le message
    Lorsque je change le type de child en objet et que je caste l'objet en string j'affiche [Element: <inter/>]. Pourquoi je n'arrive pas à recaster en élément ..?
    "Caster" un élement vers String, ça veut dire faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String text = (String)element;
    Et cela échouera avec un ClassCastException, sauf si Element est bel est bien un String.
    Bref, à aucun moment tu ne castes quoi que ce soit en String. Tu appelles juste la méthode toString(), soit explicitement, soit avec une construction du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String text = "" + element;
    Ce n'est pas un cast.

    On ne peut pas caster un objet vers quelque chose qu'il n'est pas. Caster un objet, ça veut dire : "je sais que cet objet est en fait de la classe indiquée dans le cast. Vérifie, et fais un ClassCastException si je me trompe."
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    Citation Envoyé par ttttnht Voir le message
    Ton fichier n'est pas valide:
    - des tags fermetures (en rouge) pas de tags ouvertures
    - des fermetures trop tot (en bleue).

    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
    <cla>
       <clr>
          <inter>
              <Com Value = ""/>
              <Product Alias = "toto" Preview = ""/>
                  <Mat>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rx"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Ry"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rz"/>
                  </Mat>
              </Product>
              <Product Alias = "titi" Preview = ""/>
                  <Mat>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rx"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Ry"/>
                       <Vect Vx = "1.0" Vy = "0.0" Vz = "0.0" CData = "Rz"/>
                  </Mat>
              </Product>
              <Geom Alias = "titi" extr= "-2"/>
                   <Point Ux= "1.0" Uy = "0.0" Uz = "0.0" />
                   <Point Ux= "1.0" Uy = "0.0" Uz = "0.0" />              
              </Geom >
              <Pict Href= "picturekjrer"/>
          </inter>
        </clr>
    </cla>

    Et c'est quoi le message d'erreur?
    Le fichier est valide, j'ai fait qq fautes de frappes en l'allégeant, désolé..
    Le message d'erreur est celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.ClassCastException: org.jdom.Element
    sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Element child = (Element) iterator.next();
    Pour répondre au second post, ok pour le cast mais ça ressemble qd même à un probleme de typage puisque lorsque je récupère l'iterator en object ça passe mais pas en type Element.
    Le tout est effectivement de savoir quel est le type renvoyé par l'itérateur si ce n'est pas un Element.. C'est là que je comprends pas ..

    Merci

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Par défaut
    je ne sais pas ci cela est la solution mais ca peut peut etre t'aidé

    pourquoi fait tu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Iterator iterator=listInterferences.iterator();
    while(iterator.hasNext())
       {
       // Create a new element 
       Element child = (Element) iterator.next(); // ca coince ici ..     
     
       }
    si je ne me trompe pas tu doit pouvoir passer par un for each

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(Element e : listinterferences){
       // ton code
    }
    sa évite souvent les erreur de cast et en plus c'est super pratique.

    il faut juste vérifier que
    List listInterferences= elClashResults.getChildren("inter");
    est bien une List<Element>

  6. #6
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Par défaut
    Merci pour ta réponse.
    Effectivement ça marche à présent

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

Discussions similaires

  1. [JDOM] Probleme JDOM + Thread
    Par SLefort dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 10/01/2009, 17h21
  2. Probleme ajouter element dans classe vector
    Par salmgh dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 09/12/2008, 13h53
  3. [DW9] Probleme avec element PA
    Par max336 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 22/09/2008, 10h07
  4. Probleme Data Element dans BDBG
    Par ludovic.fernandez dans le forum SAP
    Réponses: 0
    Dernier message: 28/01/2008, 12h31
  5. [JDOM]Element names cannot contain colons.
    Par mrbungle dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 15/03/2007, 14h15

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