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 :

GetContentText renvoie trop d'informations [DOM]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut GetContentText renvoie trop d'informations
    Bonjour,

    Je suis en train d'essayer de parser un fichier XML avec Dom (sur le sdk 1.5), et j'ai un petit soucis pour l'extraction d'un texte d'une balise.

    Voici le bout du fichier XML qui me pose soucis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <one-of>
          <item> valeur1    <tag>CONTENU-DE-BALISE-1</tag> </item>
          <item> valeur2    <tag>CONTENU-DE-BALISE-2</tag> </item>
          <item> valeur3    <tag>CONTENU-DE-BALISE-3</tag> </item>
          <item> valeur4    <tag>CONTENU-DE-BALISE-4</tag> </item>
    </one-of>
    Et voici mon bout de code Java censé me renvoyer une liste contenant : "valeur1", "valeur2", "valeur3" et "valeur4" :

    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
     
    //node : Noeud correspondant à une instance de "one-of"
    private List<String> getListItemsOneOf(Element node) {
       List<String> list = new Vector<String>();
       NodeList subNodeList = node.getChildNodes();
       for(int i = 0; i < subNodeList.getLength() ; i++) {
          Node subNode = subNodeList.item(i);
          if (subNode.getNodeType() == Node.ELEMENT_NODE && subNode.getNodeName().compareTo("item") == 0) {
    	String item = ((Element)subNode).getTextContent();
    	System.out.println("item = " + item);
    	list.add(item);
          }
        }
     
      return list;
    }
    Malheureusement, ça ne fonctionne pas... En effet, lorsque j'appelle la méthode "getTextContent()", au lieu de renvoyer juste "valeur1", il me renvoi "valeur1 CONTENU-DE-BALISE-1"
    C'est comme si il récupérait le texte du noeud, ainsi que le texte des fils du noeud...
    D'où ma question, comment faire pour récupèrer uniquement le texte du noeud présent ?
    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    On ne peut pas faire ça directement par Dom: il faut effectuer ensuite un filtrage manuel pour obtenir ce que tu veux.

    Et c'est normal: ton fichier XML ainsi écrit n'est pas propre. On ne doit pour bien faire utiliser les textContent que pour des noeuds terminaux de ton arbre XML

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <Personne>
       <Nom>Thomas</nom>
       <Prenom>Glenn</Prenom>
       <Adresse>
          <Numero>16</Numero>
          <Rue>Pétunias</Rue>
       </Adresse>
    </Personne>
    Dans ton cas, je pense que tu peux passer par des attributs pour résoudre ton problème. Tu récupères ainsi un fichier XML "propre":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <one-of>
          <item value="valeur1"><tag>CONTENU-DE-BALISE-1</tag> </item>
          <item value="valeur2"><tag>CONTENU-DE-BALISE-2</tag> </item>
          <item value="valeur3"><tag>CONTENU-DE-BALISE-3</tag> </item>
          <item value="valeur4"><tag>CONTENU-DE-BALISE-4</tag> </item>
    </one-of>
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Arf..
    je ne peux pas changer la forme de mon fichier XML.
    Il doit être au format GRXML.

    Bon, si c'est pas possible directement, je vais bidouiller un peu. Je reste quand même à l'écoute de toute suggestion "propre".

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Juste pour information complémentaire, le premier fils du noeud est de type TEXT_NODE. En en faite, ce sous noeud contient la valeur (le texte) du noeud parent (item)

    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
     
    private List<String> getListItemsOneOf(Element node) {
      List<String> list = new Vector<String>();
      NodeList subNodeList = node.getChildNodes();
      for(int i = 0; i < subNodeList.getLength() ; i++) {
        Node subNode = subNodeList.item(i);
        if (subNode.getNodeType() == Node.ELEMENT_NODE && subNode.getNodeName().compareTo("item") == 0) {
     
          //Le premier fils du noeud "item" correspond à la valeur de l'item (en balise de type TEXTE)
          if (subNode.getChildNodes().getLength() > 0) {
    	 Node itemValue = subNode.getChildNodes().item(0);
    	 if (itemValue.getNodeType() == Node.TEXT_NODE) {
    	    String item = itemValue.getTextContent();
    	    System.out.println("item = " + item);
    	    list.add(item);
    	 }
           }				
         }
       }
       return list;
    }
    Donc c'est pas très propre dans le sens où je me base sur l'ordre des fils, mais on va dire que ça fonctionne ^^

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/09/2014, 08h22
  2. requete qui renvoi trop de resultats ?
    Par highman dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/05/2006, 10h19
  3. [PHP-JS] Comment forcer le renvoi d'informations ?
    Par jejerome dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2006, 09h55
  4. probleme template me renvoi qq chose en trop
    Par Triangle dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 29/07/2005, 15h01
  5. [servlet][JSP] renvoi d'informations
    Par deldin dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 22/06/2004, 13h44

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