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 :

Besoin d'optimiser le parcours d'un fichier XML


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 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Par défaut Besoin d'optimiser le parcours d'un fichier XML
    Bonsoir

    J'ai un fichier xml et je cherche à optimiser le parcourt d'un fichier xml. Pour parcourir une donnée je dois appliquer tout ce bout de code.
    Auriez vous une solution pour rendre un peu plus souple ?

    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
    public class DOMXML{
       static Document document;//document
       static Element rootElement;//racine  
     
       public static void main(String[] args)
       { 
          try{
     
                DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
     
                DocumentBuilder constructeur = fabrique.newDocumentBuilder();
                document = constructeur.parse(new File("dag.xml"));
                rootElement =  document.getDocumentElement() ;
                printDomTree (rootElement,"");   
             }catch (Throwable t)
                    {
                        t.printStackTrace ();
                        System.exit (1);
                    }
     
     
                  NodeList EnfantNode = document.getElementsByTagName("Page");  
                  for(int i=0 ; i<EnfantNode.getLength(); i++)
                  {
                        Element el1 = (Element)EnfantNode.item(i);
                        NodeList GroupNode = el1.getElementsByTagName("Group");   
                        for(int j=0 ; j<GroupNode.getLength();j++)
                        {
                            Element el2 = (Element)GroupNode.item(j);
                            String nameGroup = el2.getFirstChild().getFirstChild().getNodeValue(); 
     
     
                            if(nameGroup.equals("Ordinateur"))
                            {
                                System.out.println("Ordinateur"); 
                                NodeList ItemNode = el2.getElementsByTagName("Item");                        
                                for(int k=0 ; k<ItemNode.getLength();k++)
                                {
                                    Node el3 = (Element)ItemNode.item(k);
                                    System.out.println("-valeur-"+ el3.getFirstChild().getNextSibling().getNextSibling().getFirstChild().getNodeValue());
                                 }
                             } 
                            if(nameGroup.equals("Carte mère"))
                            {
                                System.out.println("Carte mère"); 
                                NodeList ItemNode = el2.getElementsByTagName("Item");                        
                                for(int k=0 ; k<ItemNode.getLength();k++)
                                {
                                    Node el3 = (Element)ItemNode.item(k);
                                    System.out.println("-valeur-"+ el3.getFirstChild().getNextSibling().getNextSibling().getFirstChild().getNodeValue());                                
                                 }
                             } 
            }
    }
    Le fichier XML a une structure de ce type :

    -Report
    -Page .<title>
    . <icon>
    -Item .<title>
    .<icon>
    .<value>
    -Page .
    .
    -Group .<title>
    .<icon>
    - Item .
    .
    .
    -Page .
    .
    -Device .
    .
    -Group .<title>
    .<icon>
    -Item .
    .
    .
    .


    Stardeus

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Par défaut
    Bonjour

    Voila j'ai procédé a une methode recursive qui me permet d'afficher tous les elements


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                                if (node.hasChildNodes()) 
                                {
                                    // comme les Tree-s JAVA .....                        
                                    Node nextFils = node.getFirstChild(); 
                                    while (nextFils != null)
                                        {                       
                                            printDomTree (nextFils,indent+" ");                        
                                            nextFils = nextFils.getNextSibling();                 
                                        }
                                 }
    je souhaiterais faire la recuperation de certaines données XML afin de les ajouter dans une base de données.
    Je pensais que je pourrais faire un tableau qui recupere toutes les valeurs et ensuite en faire un découpage.Apparement je n'arrive pas a regrouper toutes les données dans un meme tableau.

    Auriez vous une idée de comment je pourrais faire ?
    merci
    stardeus

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    T'as la possibilité de choisir un outil, t'as essayé d'utiliser un moteur XPath, genre jaxen ou jxpath ? Ca pourrait être plus simple...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Par défaut
    Bonjour

    on m'a parlé de nombreuse api tel XSLT / JAXP /Xpath
    alors je ne sais plus quoi choisir avec tout ça .
    Je me sens un peu perdu.

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

    Informations forums :
    Inscription : Février 2005
    Messages : 172
    Par défaut
    Bonjour

    J'ai utilisé le Xpath comme vous me l'avez conseillé.
    Mais je trouve qu'il y autant de code que celui du précédent. Il est probable que je m' y suis tres mal pris.
    Pourriez vous me dire s'il existe une possibilite de creer une condition
    tel que si ordinateur alors afficher les valeurs de ses fils en Xpath


    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
     
     
                 XPathExpression expr2 = xpath.compile("//*//Page[2]//Group/Title/text()");           
                 Object result2 = expr2.evaluate(document, XPathConstants.NODESET);
                 NodeList nodes2 = (NodeList) result2;
                 for (int i = 0; i < nodes2.getLength(); i++) 
                 {
                     String ValeurGroup = nodes2.item(i).getNodeValue(); 
                     System.out.println("Title" + ValeurGroup); 
                      if(ValeurGroup.equals("Ordinateur"))
                      {
                         XPathExpression expr3 = xpath.compile("//*//Page[2]//Group//Item//Title/text()");           
                         Object result3 = expr3.evaluate(document, XPathConstants.NODESET);
                         NodeList nodes3 = (NodeList) result3;
                         for (int j = 0; j < nodes3.getLength(); j++) 
                         {
     
                           System.out.println(" Section ordinateur -> " + nodes3.item(j).getNodeValue()); 
     
                strsql = "insert into ordinateur values('"+nodes3.item(j).getNode.Value()+"'
                         } 
     
     
                       }   
                 }

  6. #6
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    je pense qu'il est effectivement possible de réduire considérablement le code en utilisant une seule expression XPath, mais pour cela il faudrait connaître ton schéma XML et la structure que tu as donnée dans ton premier post est totalement illisible...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

Discussions similaires

  1. [WD10] Parcours d'un fichier XML
    Par nuFox dans le forum WinDev
    Réponses: 2
    Dernier message: 13/04/2009, 11h40
  2. [XSLT] parcours d'un fichier XML
    Par kakid dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 17/05/2008, 18h14
  3. Parcours d'un fichier XML
    Par Amiba dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/09/2007, 14h31
  4. Optimiser l'affichage d'un fichier XML de grosse taille...
    Par UnPeuPerdu dans le forum XML/XSL et SOAP
    Réponses: 11
    Dernier message: 03/06/2004, 16h01

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