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 :

Parcourir les éléments d'un fichier XML avec JDOM : Autre Problème


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Par défaut Parcourir les éléments d'un fichier XML avec JDOM : Autre Problème
    Bonjours,

    Avant toute chose, ce sujet a déjà été traité ici. Cependant je rencontre un autre type de problème.

    Je suis étudiant, débutant en java et actuellement je dois réaliser un projet, mais pour ce faire il faut que je puisse lire les éléments d'un fichier XML afin d'utiliser les données contenues dedans (le fichier étant donné par l'entreprise avec laquelle je travaille, je ne pense pas pouvoir le modifier).

    Comme pomolo11, j'ai du suivre un tutoriel qui m'a permis d'avoir à peu près le même code que lui et donc le même problème .
    J'ai suivi des indications et je suis arrivé à un code comme précédemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(Element element : racine.getChildren("SEGMENT_PROPERTIES")) 
            {
                int j=0;
                Element segment;
                while( (segment = element.getChild("Segment"+j))!=null ) {
                    System.out.println(segment.getText());
                    j++;
                }
            }
    LA structure de mon fichier XML est assez longue mais ressemble à cela :

    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
     
    -<LOCATION_PROPERTIES NAME="STN10">
        <LOCATION DROP_DRV="N->P" DROP_MOD="0" DROP_TABLE="11" DROP_BANK="2" PICK_DRV="N->P" PICK_MOD="0" PICK_TABLE="10" PICK_BANK="2"      ANGLE="90" Y="24020" X="52380" TYPE="P+D" ID="10"/>
        -<SEGMENT_PROPERTIES>
             <NEXT_LOCATION NAME="X535" STOP="CS" LENGTH="8052" SPEED="504" INITIAL_SPEED="600" DRV="P->P" MOD="0" TABLE="127" BANK="3"/>
         </SEGMENT_PROPERTIES>
     </LOCATION_PROPERTIES>
     
     
    -<LOCATION_PROPERTIES NAME="STN11">
        <LOCATION DROP_DRV="N->P" DROP_MOD="0" DROP_TABLE="11" DROP_BANK="2" PICK_DRV="N->P" PICK_MOD="0" PICK_TABLE="10" PICK_BANK="2"  ANGLE="90" Y="24020" X="53280" TYPE="P+D" ID="11"/>
        -<SEGMENT_PROPERTIES>
             <NEXT_LOCATION NAME="X535" STOP="CS" LENGTH="7893" SPEED="502" INITIAL_SPEED="600" DRV="P->P" MOD="0" TABLE="58" BANK="3"/>
         </SEGMENT_PROPERTIES>
     </LOCATION_PROPERTIES>
     
    -<LOCATION_PROPERTIES NAME="X524">
        <LOCATION ANGLE="180" Y="46730" X="61930" TYPE="MOVE" ID="524"/>
       -<SEGMENT_PROPERTIES>
           <NEXT_LOCATION NAME="X525" STOP="CS" LENGTH="3013" SPEED="1200" INITIAL_SPEED="1200" DRV="P->P" MOD="0" TABLE="74" BANK="1"/>
           <NEXT_LOCATION NAME="X502" STOP="CS" LENGTH="9263" SPEED="470" INITIAL_SPEED="1200" DRV="P->P" MOD="0" TABLE="160" BANK="1"/>
        </SEGMENT_PROPERTIES>
     </LOCATION_PROPERTIES>
    Et la j'ai un message d'erreur qui me dit que les types sont incompatibles, un Objet ne peut pas être changé en Élément. Auriez vous une idée de comment faire ?

    Merci beaucoup.

  2. #2
    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
    En principe tu devrais nous dire où il te dit cette erreur exactement. Ça n'a aucun sens de ne pas le faire, tu veux de l'aide ou soumettre une énigme ?

    Mais bon, de ce que j'en vois tu utilises JDOM 1. Ce code est prévu pour JDOM 2, qui est préférable de toute façon.
    Et je ne vois pas ce que c'est que cette histoire de "Segment"+j, il n'y a rien de ce genre dans ton XML.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Par défaut
    Oui, c'est vrai, excuse moi je n'ai pas l'habitude encore de poster dans des forums donc j'ai un peu oublié ce qu'était la précision .

    Voila , c'est mon code complet :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    import java.io.*;
    import org.jdom.*;
    import org.jdom.input.*;
    import org.jdom.filter.*;
    import java.util.List;
    import java.util.Iterator;
     
    public class NewClass
    {
       static org.jdom.Document document;
       static Element racine;
     
     
       static void afficheALL()
       {
       //On crée une List contenant tous les noeuds "etudiant" de l'Element racine
    /*   List listLocation = racine.getChildren("LOCATION_PROPERTIES");
     
       //On crée un Iterator sur notre liste
       Iterator i = listLocation.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 :
          //sélectionner un nœud fils, modifier du texte, etc...
          Element segment = (Element)i.next();
          //On affiche le nom de l’élément courant
          System.out.println(segment.getChild("SEGMENT_PROPERTIES").getText());
            
            }
    */        
            for(Element element : racine.getChildren("LOCATION_PROPERTIES")) 
            {
                int j=0;
                Element segment;
                while( (segment = element.getChild("Segment"+j))!=null ) 
                {
                    System.out.println(segment.getText());
                    j++;
                }
            }
     
        }
       public static void main(String[] args)
       {
          //On crée une instance de SAXBuilder
          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("C:\\Users\\Thomas\\Desktop\\Chalmers\\routes.xml"));
          }
          catch(JDOMException | IOException e){}
     
          //On initialise un nouvel élément racine avec l'élément racine du document.
          racine = document.getRootElement();
     
          afficheALL();
       }
     
     
    }
    J'ai laissé toutes les lignes de commentaires afin que vous voyez de quoi je suis parti.
    Mon erreur se trouve à la ligne 33.
    C'est à dire JDOM2 ? Qu'est ce que cela m'apporterai? Je n'ai trouvé que ces lignes là d'import.

    De ce que j'ai "compris" ou sûrement cru comprendre , le "segment"+ j correspondrai à ces lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       //On crée un Iterator sur notre liste
       Iterator i = listEtudiants.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 :
          //sélectionner un nœud fils, modifier du texte, etc...
          Element courant = (Element)i.next();
          //On affiche le nom de l’élément courant
          System.out.println(courant.getChild("nom").getText());
       }
    Et donc me permettrais d'afficher les noms des éléments afin de pouvoir plus facilement les utiliser. Mais comme je l'ai dis je suis vraiment débutant et je pense m'excuser très prochainement car l’aberration que je viens de dire va surement vous offusquer.

  4. #4
    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 thonath Voir le message
    Mon erreur se trouve à la ligne 33.
    Ouais donc c'est ce que je disais. Tu utilises JDOM1 mais le programme est pour JDOM2.

    Citation Envoyé par thonath Voir le message
    C'est à dire JDOM2 ?
    Même chose que JDOM1 mais version 2.

    Citation Envoyé par thonath Voir le message
    Qu'est ce que cela m'apporterai?
    Déjà, tu n'aurais pas cette erreur.
    Ensuite, JDOM2 permet de programmer plus simplement que le 1. Notamment parce qu'il utilise les génériques qui sont apparus dans Java 5, et JDOM1 qui date d'avant, ne le pouvait pas.

    Citation Envoyé par thonath Voir le message
    Je n'ai trouvé que ces lignes là d'import.
    JDOM2 est très gentil, il te dira tout ce que tu as besoin de savoir à propos des imports. De toute façon c'est pas compliqué, il faut ajouter 2 derrière jdom pour que ça fasse jdom2.

    Citation Envoyé par thonath Voir le message
    De ce que j'ai "compris" ou sûrement cru comprendre , le "segment"+ j correspondrai à ces lignes

    Et donc me permettrais d'afficher les noms des éléments afin de pouvoir plus facilement les utiliser. Mais comme je l'ai dis je suis vraiment débutant et je pense m'excuser très prochainement car l’aberration que je viens de dire va surement vous offusquer.
    Ah, ça...
    Une fois passé le temps de l'offuscation, je suis aussi juste démuni, comme Arthur devant Perceval dans Kaamelott.

    Je veux dire... segment+j ne correspond à rien, il est pas dans ton XML et pas dans le code Java que t'as pris en exemple. Clairement il vient de nulle part, donc tu l'as forcément mis toi-même, et, je suppose que ma question, au fond, c'était... Mais pourquoi ? Pourquoi avoir mis segment+j au lieu d'autre chose ?
    Et... Comment il pourrait être question de nom ? Je ne vois nulle part de nom ou de name ou quoi que ce soit qui parle de nom.

    Être débutant c'est normal, j'ai été débutant, mais, ça veut pas dire taper des trucs au hasard sur son clavier et essayer de décider ensuite pourquoi ça devrait marcher.
    Quand on tape quelque chose il faut avoir une raison de le faire, de penser que ça va marcher, parce que ça va avoir un effet correspondant à quelque chose qu'on a déjà vu.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Par défaut
    Tu es assez méchant par rapport à la comparaison avec Perseval .. Mais "C'est pas faux"

    Quoiqu'il en soit, pour le JDOM2 j'ai compris de quoi il était question. Ce qui m'a induit en erreur, c'était apparemment le tutoriel qui utilise le JDOM1 donc j'ai reproduit la même chose. Maintenant celle ci est corrigée, merci beaucoup.

    Et oui je comprend, plus je me relis, plus je me dis que je fais les choses trop rapidement ^^.
    Ici j'ai principalement besoin de la "next location". Un getName me serait il plus utile?
    Ce que je veux faire, c'est que quand j'appelle une location (par exemple STN 11), le logiciel m'affiche le nom de la location suivante (next location : X535 ou d'autres s'il y en a). Tout cela pour avoir une "route" quand je veut aller d'un point à l'autre le chemin à prendre serai affiché.
    Et la je ne vois pas comment faire.

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
    import java.io.IOException;
    import java.util.List;
     
    import org.jdom2.Content;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
    import org.jdom2.util.IteratorIterable;
     
    public class NewClass
    {
       private static final String xmlroutes = "C://Users//Thomas//Desktop//Chalmers//routes.xml";
       static org.jdom2.Document document;
       static Element racine;
     
       static void afficheALL()
       {
           racine.getChildren("LOCATION_PROPERTIES").stream().forEach((element) -> 
           {
               Element NEXT_LOCATION;
               while( (NEXT_LOCATION = element.getChild("NEXT_LOCATION NAME"))==null )
               {
                   // La ligne est pour vérifier qu'on entre bien dans la boucle : ICI NON !
                   System.out.println("ok");
                   System.out.println(NEXT_LOCATION.getName());
               }
           });
     
        }
     
       public static void main(String[] args)throws JDOMException, IOException
       {
          //On crée une instance de SAXBuilder
          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(xmlroutes);
          }
          catch(Exception e){}
     
          //On initialise un nouvel élément racine avec l'élément racine du document.
          racine = document.getRootElement();
     
          afficheALL();
       }
     
    }
    Voila le code "proposé" par JDOM2 Je comprend encore moins la ligne 21.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Par défaut
    C'est bon j'ai réussi à faire la première étape, merci quand même pour tes conseils

Discussions similaires

  1. [JDOM] Parcourir les éléments d'un fichier XML avec JDOM
    Par pomolo11 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 13/12/2013, 23h39
  2. [JDOM] Suppression d'un élément dans un fichier XML avec JDOM
    Par pomolo11 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 08/12/2013, 11h36
  3. extraire les données d'un fichier xml avec xmlspy
    Par mouna1 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/06/2009, 13h50
  4. Réponses: 3
    Dernier message: 20/05/2009, 09h12
  5. [JDOM] Recpérer une liste de tous les éléments d'un fichier XML
    Par adilo dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 30/08/2006, 10h15

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