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 :

Problème de lecture d'un fichier XML avec Java [JDOM]


Sujet :

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

  1. #1
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut Problème de lecture d'un fichier XML avec Java
    Bonjour,

    J'ai un petit probleme en Java, je n'arrive pas à afficher ce que je veux pour un fichier XML.
    Le but étant d'avoir le temps de toutes les station à toutes les stations :
    Départ STN10 : arrivée STN11 --- Temps : ...
    Départ STN10 : Arrivée STN12 --- Temps : ...

    etc//

    Départ STN11 : Arrivée STN10 --- Temps : ...

    Je travaille sur un fichier XML mais je n'arrive pas à afficher tous les élément internes d'une liste . voici mon fichier XML : http://dl.free.fr/mXmBGlPpN

    Et voila mon programme :

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    public class TimeCalcul
    {  
        private static final String xmlroutes = "C://Users//Desktop//routes.xml";
     
        static Element root;
     
        public static void main(String[] args) throws JDOMException, IOException
        {
            // the SAXBuilder is the easiest way to create the TimeCalcul objects.
            SAXBuilder jdomBuilder = new SAXBuilder();
     
            // jdomDocument is the TimeCalcul Object
            Document jdomDocument = jdomBuilder.build(xmlroutes);
     
            root = jdomDocument.getRootElement();
            rootiteration();
     
     
        public static List<Element> getNextPropChildren(Element loc){
            Element segment_properties = loc.getChild("SEGMENT_PROPERTIES");
            List <Element> next_location = segment_properties.getChildren("NEXT_LOCATION");
            return next_location;
        }
     
        public static Element getElembyName(final String name){
            List <Element> location_properties = root.getChildren("LOCATION_PROPERTIES");
            for (Element loc : location_properties)
            {
                if(loc.getAttributeValue("NAME").equals(name))
                    return loc;
            }
            return null;
        }
     
        public static int Timetochild (Element next)
        {
            int L = Integer.parseInt(next.getAttributeValue("LENGTH"));
            int S = Integer.parseInt(next.getAttributeValue("SPEED"));
            int time = L/S;
            return time;
        }
        public static void rootiteration() throws IOException
        {
            List <Element> location_properties = root.getChildren("LOCATION_PROPERTIES");
            for (Element loc : location_properties)
            {
                if(loc.getAttributeValue("NAME").startsWith("STN")== true)
                {    
                    System.out.print("From : "+loc.getAttributeValue("NAME"));
     
                    List <Element> next_location = getNextPropChildren(loc);
                    for (Element next: next_location)
                    {
                        int time = Timetochild(next);
                        System.out.print(" to " +next.getAttributeValue("NAME"));
                        System.out.println("  ---  Time to go : "+time+" seconds");
                        if(next.getAttributeValue("NAME").startsWith("STN")== true)
                        {
                            System.out.print("Arrival : " +next.getAttributeValue("NAME"));
                            System.out.println("  ---  Total Time : "+time+" seconds");
                        }
                        if(next.getAttributeValue("NAME").startsWith("STN")== false)
                        {
                            Element next_elem = getElembyName(next.getAttributeValue("NAME"));
                            //System.out.println(next_elem);
                            recursive(loc.getAttributeValue("NAME"),time, next_elem);
                        }
                    }
                }
            }
        }
     
        public static void recursive(String parent, int t0, Element child) throws IOException 
        {
            List <Element> listnext_location = getNextPropChildren(child);
     
            for (Element next : listnext_location )
            {
                int t1 = Timetochild(next);
                if (next.getAttributeValue("NAME").startsWith("STN")== true)
                {
    //                while(next!=null){
                    System.out.println("Here1");
                    int time = t0+t1;
                    System.out.println("From : "+parent+" to "+next.getAttributeValue("NAME")+"  ---  Total Time : "+time+" seconds");
                    break;
    //                }
                }
                if (next.getAttributeValue("NAME").startsWith("STN")== false) // child is not STN, recurse
                {
                    //System.out.println("Here2");
                    int time = t0+t1;
                    System.out.print("From : "+parent+" to "+next.getAttributeValue("NAME"));
                    System.out.println("  ---  Time to go : "+time+" seconds");
                    Element elem = getElembyName(next.getAttributeValue("NAME"));
                    recursive(parent, time,elem);
     
                }
            }
        }
    }
    je n'obtient que cela..

    From : STN10 to X535 --- Time to go : 15 seconds
    From : STN10 to X536 --- Time to go : 17 seconds
    From : STN10 to X537 --- Time to go : 19 seconds
    Here1
    From : STN10 to STN26 --- Total Time : 30 seconds
    Here1
    From : STN10 to STN23 --- Total Time : 29 seconds
    Here1
    From : STN10 to STN19 --- Total Time : 26 seconds
    From : STN11 to X535 --- Time to go : 15 seconds
    From : STN11 to X536 --- Time to go : 17 seconds
    From : STN11 to X537 --- Time to go : 19 seconds
    Here1
    From : STN11 to STN26 --- Total Time : 30 seconds
    Here1
    From : STN11 to STN23 --- Total Time : 29 seconds
    Here1
    From : STN11 to STN19 --- Total Time : 26 seconds
    From : STN12 to X534 --- Time to go : 7 seconds
    From : STN12 to X535 --- Time to go : 9 seconds
    From : STN12 to X536 --- Time to go : 11 seconds

    ETC//

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Si tu veux parcourir tout les chemin, sachant que ton fichier xml ne contient que des segments de chemin à remettre bout à bout, il faut commencer par convertir ton ficheir xml en une structure en mémoire que tu peux utiliser.

    Ensuite, une fois cette structure chargée, tu peux commencer à écrire des méthodes récursives qui explorent tous les chemins possible.

    Mais là tu ne fais rien de tout ça pour le moment, visiblement tu te contente de lister les segments que tu trouve :/ Le problème n'est pas la lecture, mais ce que tu fais des données une fois lues. Pour le moment, rien.

  3. #3
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Justement! Pour l'instant je ne fais rien, avant tout, je veux pouvoir afficher ce dont j'ai besoin. Le point suivant étant de stocker toutes les temps obtenus donc une sorte de matrice avec les stations pour clé. Je pense utiliser un Hashmap pour cela.

    Qu'entend tu par : "convertir ton fichier xml en une structure en mémoire que tu peux utiliser."

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Ben j'entends fait quelque chose des données que tu trouve dans le fichier xml, et pas juste les afficher dans la console comme tu le fait. Tu es déjà occupé de faire tout le boulot de lecture, c'est bien, mais maintenant il faut que tu fasse ton analyse pour savoir comment tu va stocker ça en mémoire, et ensuite que tu fasse le code qui exploite ça pour calculer tous les chemins possibles.

  5. #5
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Je suis d'accord avec toi, mais avant tout j'ai besoin d'afficher correctement ce don't j'ai besoin, mais comme je l'ai dis pour le moment ca m'affiche pas ce que je veux.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Ca ne t'affiche pas ce que tu veux, parce que ce que tu veux n'existe pas dans le fichier, tu dois le calculer, c'est ce que j'ai dit plus haut, pour calculer les chemin, ben faut déjà stocker en mémoire les segments, pour pouvoir ensuite les mettre bout à bout. Et pour le moment tu ne fais rien de tout ça, tu te contente d'afficher ce que tu lit dans le xml. C'est une première étape, mais c'est loin d'être suffisant.

  7. #7
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    D'accord, donc si je comprend bien, mon code n'a beosin d'aucunes modifications, si ce n'est que de créer un Hashmap pour réutiliser les données? Un peu comme cela . Evidemment avec beaucoup de modifications.

    private static Map<String, Location> loadData(Element root) {
    Map<String, Location> result = new HashMap<>();

    Si jamais tu sais vraiment comment faire, je t'en serais gré de m'aider Parce que ca je maîtrise pas du tout, déja que j'ai eu du mal pour obtenir le précédent code.

  8. #8
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Mis à part que je ne suis qu'au début, pour ceux qui peuvent être intéréssés plus tard, voila comment j'ai finalment fait.

    J'ai rajouté cette ligne dans le main -- private static Collection <Element> closed = new HashSet <Element>();

    Puis j'ai fais un clear à chaque fin d'itération (pour passer de STN10 à STN11, etc..)avec cette commande -- closed.clear();

    Et le dernier probleme était que les valeurs restaient en mémoire donc réécrivaent sur leur "anciennes" valeur (on pouvait revenir sur X535 par exemple. Il y avait une boucle interne qui faisait un peu tout bugger) donc j'ai rajouté cette commande qui m'a permis d'éviter cela --

    if(closed.contains(child)==false)
    {
    closed.add(child);

    Si jamais vous voulez plus d'informations, n'hésitez pas à me demander.

    Voici ce que ca me donne, et donc ce que je voulais avoir. Juste, ne vous fiez pas aux temps, ils sont en pleine modification ..

    From : STN10 to STN26 --- Total Time : 30 seconds
    From : STN10 to STN27 --- Total Time : 31 seconds
    From : STN10 to STN29 --- Total Time : 33 seconds
    From : STN10 to STN30 --- Total Time : 35 seconds
    From : STN10 to STN28 --- Total Time : 32 seconds
    ETC///
    From : STN11 to STN26 --- Total Time : 30 seconds
    From : STN11 to STN27 --- Total Time : 31 seconds
    From : STN11 to STN29 --- Total Time : 33 seconds
    From : STN11 to STN30 --- Total Time : 35 seconds
    From : STN11 to STN28 --- Total Time : 32 seconds

    @tchize_ : Je te serai reconnaissant si jamais tu pouvais me donner des conseils pour un HashMap.

    Cordialement.

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

Discussions similaires

  1. [JDOM] Problème lecture d'un fichier XML avec JDOM
    Par Neo_007 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 22/06/2010, 10h46
  2. Probléme de lecture d'un fichier .txt avec java
    Par samorra dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 29/09/2009, 01h13
  3. Problème lors de la lecture d'un fichier xml avec XMLBeans
    Par oscar78 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 07/09/2007, 15h04
  4. Problème de lecture d'un fichier XML d'InfoPath
    Par snadus dans le forum InfoPath
    Réponses: 7
    Dernier message: 06/06/2006, 15h45
  5. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 01h13

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