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 :

String XML exploitation des data


Sujet :

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

  1. #1
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut String XML exploitation des data
    Bonjour @ tous,

    Je récupère une string qui a la syntaxe du xml. (je peux la modifié lors de sa génération.)

    Exemple
    Code XML : 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
     
    <results>
    <cnt>33</cnt>	<error><![CDATA[]]></error>
    <record>
    	<idagent><![CDATA[1]]></idagent>
    	<prenomagent><![CDATA[-]]></prenomagent>
    	<nomagent><![CDATA[--]]></nomagent>
    	<adresseagent><![CDATA[.]]></adresseagent>
    	<codepostalagent><![CDATA[0]]></codepostalagent>
    	<nomville><![CDATA[.]]></nomville>
    	<telagent><![CDATA[0000000000]]></telagent>
    	<portagent><![CDATA[0000000000]]></portagent>
     
    </record>
    <record>
    	<idagent><![CDATA[24]]></idagent>
    	<prenomagent><![CDATA[Pierre]]></prenomagent>
            ......
     
     
    </results>

    Maintenant je souhaiterais exploité ces données.
    Par exemple
    - crée un tableau
    - remplir une combo
    - remplir un treeview
    etc ...

    pouvoir exploiter simplement ces données.

    J'ai bien vue jdom, dom, jaxp, & co mais je dois dire que j'ai du mal à faire un choix, il me paraisse tous plus compliqué les un que les autres. Et les essai que j'ai fait n'ont pas fonctionné.
    Ces données sont des résultats de requêtes sql, plus ou moins complexe.

    que me conseiller vous ?
    Comment feriez vous ?

    Merci de votre retour

    Nicolas

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Que trouves-tu compliqué dans JDOM2 ?

    Pour lire un fichier :
    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
    File file = new File( le chemin de u fichier );  
     
      try {  
     
      SAXBuilder saxBuilder = new SAXBuilder();  
     
       Document document = saxBuilder.build(file);  
     
       Element rootNode = document.getRootElement();   // pour récupérer l'élément racine
        ...
     
       catch (JDOMException e) {  
       // TODO Auto-generated catch block  
       e.printStackTrace();  
      } catch (IOException e) {  
       // TODO Auto-generated catch block  
       e.printStackTrace();  
      }
    Et ensuite, il y a des méthodes pour récupérer un ou plusieurs éléments, avec leur nom, simplement, comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Element> recordList = rootNode.getChildren("record");
    pour récupérer tous les éléments dont le nom est record.


    Sinon, tu as un exemple de code que tu n'as pas réussi à faire fonctionner ?


    Par ailleurs, tu génères ce fichier xml dans une autre application je suppose, mais pourquoi, ne pas faire la requête directement ? Si tu sais exploiter le résultat de ta requête pour générer un xml, peut-être pourrais-tu directement exploiter ce résultat pour peupler ton UI (à moins que la DB ne soit pas accessible).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    Bonsoir,

    Merci pour cette réponse.

    Effectivement présenté comme ça, c'est bien plus clair.
    Mon premier problème est que je n'ai pas de fichier xml mais seulement une String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String rt = "";
                for (int c; (c = in.read()) >= 0; rt+=(char)c);
                return rt;
    Je ne sais pas si ça, ça marcherait
    Document document = saxBuilder.build(ma String);

    j'essayerais mais j'ai un doute ?!

    J'ai essayer de convertir la string en document mais le parcours du document ne fonctionne pas, cela semble vide.

    La fonction que j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private static Document convertStringToDocument(String xmlStr) {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
            DocumentBuilder builder; 
            try { 
                builder = factory.newDocumentBuilder(); 
                Document doc = builder.parse( new InputSource( new StringReader( xmlStr ) ) );
                return doc;
            } catch (Exception e) { 
                e.printStackTrace(); 
            }
            return null;
        }
    Mon objectif est de récupérer ce flux (résultat de requête ou autre) et de pouvoir l'exploiter. Le XML m'avais semblé une bonne idée. Pour ce test j' utiles une httpurlconnection vers un fichier .php

    en te remerciant
    Nicolas

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    OK, en fait, c'est un xml que tu lis sur une URL.

    La solution avec le StringReader devrait fonctionner (s'assurer bien que la chaine ne contiennent bien qu'un flux xml, pas d'espaces devant ou derrières, ou autres, et évidemment que le flux lut ait bien été décodé avec le bon encodage).

    Ensuite, le code que tu indiques ce n'est pas pour JDOM2 (le code que tu as mis, ça produit des org.w3c.Element, qui est un peu plus difficile à manipuler que le JDOM2, j'en conviens), mais c'est aussi simple en JDOM2 de lire un Reader, qu'un File :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SAXBuilder saxBuilder = new SAXBuilder();  
     
       Document document = saxBuilder.build(reader);
    Éventuellement, un puriste te dirais de veiller à ce le StringReader soit bien fermé, parce qu'en règle générale, un Reader doit être fermé après avoir été utilisé (ce qui libère des ressources et des verrous), mais ça une chaîne de caractères, donc rien à fermer.

    Ça donnerait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SAXBuilder saxBuilder = new SAXBuilder();  
     
    try( StringReader reader = new StringReader( xmlStr ) ) {
       Document document = saxBuilder.build(reader);  
     
       ...
     
    }
    Maintenant, tu peux aussi facilement lire directement le flux sur l'URL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SAXBuilder saxBuilder = new SAXBuilder();  
     
    try( Reader reader = new InputStreamReader(conn.getInputStream(), "UTF-8") ) {
       Document document = saxBuilder.build(reader);  
     
       ...
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    Bonjour @ tous,

    Merci pour ces infos,

    Voila ou j'en suis :

    Je crée le doc directement à partir du flux et les éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    saxBuilder = new SAXBuilder();
     
                reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                document = saxBuilder.build(reader);
     
                rootNode = document.getRootElement();
                recordList = rootNode.getChildren("record");
                cnt = rootNode.getChildren("cnt");
    Petite fonction pour récupérer la valeur cnt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public String getCnt() {
            String rt = cnt.get(0).toString();
            return rt;
        }
    Cependant quand j'essaye de l’afficher dans un JTextArea, je n'obtient pas vraiment le bon truc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jTA_Result.setText(con.getCnt());
    Mais j'obtiens cela : [Element: <cnt/>]

    Il doit y avoir un truc que j'ai pas compris quelquepart !!

    Merci de votre aide

    Nicolas

  6. #6
    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
    Eh ben, oui. T'es pas loin, pourtant.

    Tu le sors d'où, le toString() ? Quel tutoriel JDOM t'a montré qu'il faut appeler toString() ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    Certainement un reflex genre psycho !!! je veux une string alors je met toString()

    sinon j'ai modifie mon truc (Merci la FAQ) et à vous tous pour votre aide.

    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
     
    rootNode = document.getRootElement();
    recordList = rootNode.getChildren("record");
     
    public String getCnt() {  // directement en dessous du root
            String rt = rootNode.getChild("cnt").getText() + "\n";
            return rt;
        }
    public String getErr() { // directement en dessous du root
            String rt = rootNode.getChild("error").getText() + "\n";
            return rt;
        }
    public String getCol(String nom) {
            String rt="";
            Iterator i = recordList.iterator();
            while(i.hasNext()) {
                Element courant = (Element)i.next();
                rt += courant.getChild(nom).getText() + "\n";
             }
            return rt;
        }
     
    jTA_Result.setText(con.getCnt());
    jTA_Result.append(con.getErr());
    jTA_Result.append(con.getCol("prenomagent"));
    Pour ça je penses que c'est bon ??

    Si j'avais encore une liste dans la liste <record>

    Code XML : 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
    <record>
      <a></a>
      <b></b>
      <sousrecord>
        <c></c>
        <d></d>
      </sousrecord>
    </record>
    <record>
      <a></a>
      <b></b>
      <sousrecord>
        <c></c>
        <d></d>
      </sousrecord>
    </record>

    je devrais faire dans la boucle iterator??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sousRecordList = recordList.getChildren("sousrecord");
    Merci de votre retour

    Nicolas

  8. #8
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    Je reviens vers car je repedalle dans la choucroute mais grave et je ne trouve pas les bonne methodes !!

    Si j'ai bien compris :

    dans la list recordList j'ai une liste d'element, qui dans mon cas peut correspondre a un row !

    Pour chaque élément j'ai bien sur les valeurs que je peux récupéré si je connais le nom de la balise xml soit dans mon cas le nom de colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public String getCol(String nomColonne) {
            String rt="";
            Iterator i;
            i = recordList.iterator();
            while(i.hasNext()) {
                Element courant = (Element)i.next();
                rt += courant.getChild(nomColonne).getText() + "\n";
             }
            return rt;
        }
    Mais ce que je voudrais en fait c'est connaitre :
    - Le nombre de balise xml qu'il y a dans chaque élément de ma list, dans mon cas le nombre de colonne
    - et si possible le nom de chaque balise

    Est ce possible ?
    Merci de votre aide

    Nicolas

  9. #9
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    J'ai trouvé une soluce, mais j'ai un peu l'impression de bidouillé

    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
    public void getInfoRecords() {
            Iterator i;
            Iterator i2;
            nbCol = 0;
     
            i = recordList.iterator();
            if (i.hasNext()) {
                Element courant = (Element)i.next();
                List listCol = courant.getChildren();
                nbCol = listCol.size();  // nb de colonne = nb de balise
                i2 = listCol.iterator();
                while(i2.hasNext()) {
                    Element courant2 = (Element)i2.next();
                    listNomColonne.add(courant2.getName());
                }
             }
        }
    Merci de votre retour
    Nicolas

  10. #10
    Expert éminent
    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
    Par défaut
    Citation Envoyé par nma Voir le message
    Bonsoir,

    Merci pour cette réponse.

    Effectivement présenté comme ça, c'est bien plus clair.
    Mon premier problème est que je n'ai pas de fichier xml mais seulement une String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String rt = "";
                for (int c; (c = in.read()) >= 0; rt+=(char)c);
                return rt;
    Les performances de ce code vont être catstrophiquement catastrophiques. Le nombre effarant d'objets String et StringBuilder que tu va créer :s

    Sérieusement, passe directement conn.GetInputStream à ton builder:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saxBuilder.build(conn.getInputStream())

  11. #11
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    Bonjour @ tous,

    Je voudrais vous soumettre mon code final qui fonctionne
    Afin que vous puissiez me donner vos suggestions et commentaires.

    Pour le principe j' envoie une requete SQL à fichier php qui me renvoie un flux de type XML. J 'utilise aussi une clef unique en dur dans le fichier php et dans le code java

    Voila ma classe

    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    package javaphpconnector;
     
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import javax.swing.JOptionPane;
     
    import org.jdom2.*;
    import org.jdom2.input.SAXBuilder;
     
     
    /**
     *
     * @author Nicolas
     */
    public class C_Connector {
     
        public C_Connector() {
            this.listNomColonne = new ArrayList<>();
     
        }
     
        public void mysqlQuery(String req) {
            try {
                url = new URL(connector);
                Map<String,Object> params = new LinkedHashMap<>();
                params.put("sql", req);
                params.put("private_key", private_key);
     
                StringBuilder postData = new StringBuilder();
                for (Map.Entry<String,Object> param : params.entrySet()) {
                    if (postData.length() != 0) postData.append('&');
                    postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
                    postData.append('=');
                    postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
                }
                byte[] postDataBytes = postData.toString().getBytes("UTF-8");
     
                conn = (HttpURLConnection)url.openConnection();
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
                conn.setDoOutput(true);
                conn.getOutputStream().write(postDataBytes);
     
                saxBuilder = new SAXBuilder();
     
                reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                document = saxBuilder.build(reader);
     
                rootNode = document.getRootElement();
                recordList = rootNode.getChildren("record");
                getInfoRecords();
     
            } catch (JDOMException | IOException e) {  
                JOptionPane.showMessageDialog(null,e.toString()+"\n","Erreur",JOptionPane.INFORMATION_MESSAGE); 
            }
     
        }
     
    	// Fonction pour recuperer les noms et le nombre de champs
    	// nbCol -> nombre de colonne
    	// listNomColonne -> list des noms de colonne
          public void getInfoRecords() {   
            Iterator<Element> i;
            Iterator<Element> i2;
            nbCol = 0;
            i = recordList.iterator();
            if (i.hasNext()) {
                Element courant = i.next();
                List<Element> listCol = courant.getChildren();
                nbCol = listCol.size();
                i2 = listCol.iterator();
                while(i2.hasNext()) {
                    Element courant2 = i2.next();
                    listNomColonne.add(courant2.getName());
                }
             }
        }
    	// Fonction pour recuperer le id en cas insert
        public String getNewId() {
            String rt = rootNode.getChild("newid").getText();
            return rt;
        }
    	// Fonction pour recuperer le nombre de rtow
        public String getCnt() { // directement en dessous du root
            String rt = rootNode.getChild("cnt").getText();
            return rt;
        }
    	// Fonction pour recuperer l'erreur si il y en a une
        public String getErr() { // directement en dessous du root
            String rt = rootNode.getChild("error").getText();
            return rt;
        }
    	// Fonction pour recuperer le nombre de colonne
        public int getNbCol() {
            return nbCol;
        }
    	// Fonction pour recuperer les nom des colonnes
        public ArrayList<String> getNomsColonnes() {
            return listNomColonne;
        }
    	// Fonction pour recuperer toutes les valeurs d'une colonne
        public String getCol(String nom) {
            String rt="";
            Iterator<Element> i;
            i = recordList.iterator();
            while(i.hasNext()) {
                Element courant = i.next();
                rt += courant.getChild(nom).getText();
             }
            return rt;
        }
     
    private final String private_key = "maclef";
    private final String USER_AGENT = "Mozilla/5.0";    
    private final String connector = "http://localhost/monfichier.php";
    private SAXBuilder saxBuilder; 
    private Document document;
    private Element rootNode;
    private List<Element> recordList;
    private int nbCol;
    private ArrayList<String> listNomColonne;
     
    private URL url;
    private HttpURLConnection conn;
    private OutputStreamWriter writer;
    private BufferedReader reader;
    }
    Pour les tests j'utilise un simple jTextArea

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    C_Connector con = new C_Connector();
            con.mysqlQuery("select * from agents where actif=1");
     
            jTA_Result.setText(con.getCnt()+"\n");
            jTA_Result.append(con.getErr()+"\n");
            jTA_Result.append(con.getCol("prenomagent")+"\n");
            jTA_Result.append("-\n");
            jTA_Result.append(con.getNbCol()+"\n");
            jTA_Result.append("-\n");
            for (int i = con.getNbCol()-1; 0<=i;i--) {
                ArrayList<String> listNomColonne;
                listNomColonne = con.getNomsColonnes();
                jTA_Result.append(listNomColonne.get(i).toString()+"\n");
            }
    Voili - voilou

    Merci de vos retour, j'ai un doute sur la fonction qui récupère le nom des champs getInfoRecords(), j'ai l'impression de bidouillé.
    Nicolas

  12. #12
    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 nma Voir le message
    J'ai trouvé une soluce, mais j'ai un peu l'impression de bidouillé
    - Pas besoin de boucler sur les records pour extraire les méta-infos, tu peux te contenter du premier.
    - Pas besoin d'Iterator depuis Java 5. Utilise un foreach.
    - Pas besoin de cast vers Element avec JDOM 2.
    - Pas besoin de nbCol si tu as une liste des noms de colonnes. Le nombre de colonnes c'est nomsColonnes.size().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Element firstRecord = root.getChild("record");
    for(Element colonne : firstRecord.getChildren()) {
      nomsColonnes.add(colonne.getName());
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Expert éminent
    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
    Par défaut
    Enfin, ceci est dangereux


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
    document = saxBuilder.build(reader);
    Tu présuppose que le serveur va t'envoyer de l'utf-8, il serait bien plus intéressant et solide d'utliser les infos que renvoie le serveur, afin de t'adapter en cas de changement dans le futur:


    Pour utiliser les infos HTTP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), conn.getContentEncoding()));
    document = saxBuilder.build(reader);
    Pour utiliser les règles de détection définies dans le standard xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document = saxBuilder.build(conn.getInputStream());

  14. #14
    nma
    nma est déconnecté
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 225
    Par défaut
    Merci @ vous pour votre intérêt et vos conseils avisés.

    J'ai modifié ma fonction pour les méta-infos cela fonctionne nickel et en plus je trouve que c'est plus rapide.

    Le XML envoyé par le serveur est généré suite à une requête que je force en utf8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function fx_cxn($db){
    	$dbh=mysql_connect (HOST, USER, PWD)
    	or die ('Failed to Connect to Database: ' . mysql_error());
    	mysql_select_db ("$db");
    	mysql_query("SET NAMES 'utf8'"); 
    }
    Le reste c'est les balises XML, je n'ai pas mis d' entête XML non plus.

    En tout cas merci à tous ceux qui ont participer à ce post, sans vous je n'y serais pas arriver et en plus j'ai appris quelques bases de jdom2. Je penses que maintenant avec notre ami google, je devrais m'en sortir un peu mieux.

    @+
    Nicolas

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

Discussions similaires

  1. Extraire des data d'un flux xml avec des attributs
    Par kairi092 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 04/01/2015, 23h13
  2. Mettre des caractères coréen dans le strings.xml
    Par user2000 dans le forum Android
    Réponses: 2
    Dernier message: 12/07/2011, 16h20
  3. Exploiter des données XML sous Visual Studio (XMLDataDocument)
    Par johnnhoj dans le forum Visual Studio
    Réponses: 2
    Dernier message: 12/06/2010, 17h54
  4. [XML] gestion des string vide?
    Par bakonu dans le forum C#
    Réponses: 11
    Dernier message: 15/03/2008, 00h52
  5. Quel parseur XML pour des Strings ?
    Par krokmitaine dans le forum XML
    Réponses: 13
    Dernier message: 19/12/2006, 21h01

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