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 sélection de noeuds


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
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Par défaut Problème de sélection de noeuds
    Je réalise un petit éditeur Java qui permet d'éditer et d'ajouter facilement du contenu à ceux-ci pour un utilisateur lambda.

    Je sélectionne un noeud grâce à DOM et à une expression XPath :

    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //Création du XPath 
    		    XPathFactory fabriqueXPath = XPathFactory.newInstance();
    		    XPath xpath = fabriqueXPath.newXPath();
    		    //évaluation de l'expression XPath
    		    String expression="//marque[@id_marque='1']";
    		    XPathExpression exp = xpath.compile(expression);
    		    Node resultat = (Node)exp.evaluate(document,XPathConstants.NODE);
    		    System.out.println(resultat.getNodeName());
    		    NodeList tab=resultat.getChildNodes();
    		    for(int i=0;i<tab.getLength();i++){
    		    	System.out.println(i+". "+tab.item(i).getNodeName()+" "+tab.item(i).getTextContent());
    		    }


    mais lorsque je boucle sur ses fils j'obtiens ça :

    noeud_pere
    0. #text

    1. nom_fils1
    2. #text

    3. noeuds_fils2
    4. #text

    Quelqu'un sait comment éliminer ces #text ? C'est une question de formatage non ? J'ai beau chercher je ne vois pas comment régler le problème alors je fais appel à une âme charitable .

    Merci d'avance.

    Edit : Histoire d'être un peu plus clair.

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Je n'y connais rien directement en java, par contre je suis à peu près sur qu'il ya plusieurs outils qui permmettent de faire ce que tu demandes.
    Tu devrais citer les class et API utiliser si tu veux une reponse precise

  3. #3
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    Les noeuds utilisés dans ton cas sont ceux du DOM, tu peux regarder la javadoc correspondante...

    Dans la sortie que tu donnes, ont voit qu'il y a des noeuds de type texte (d'où leur nom : "#text") et leur contenu est probablement un retour chariot, puisque ta sortie n'affiche rien mais revient à la ligne...
    Le noeud de ton résultat doit être de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <noeud_pere>
    <nom_fils1>
    <noeud_fils2>
    ...
    C'est donc normal, mais si tu veux éliminer les noeuds de type texte, tu doit utiliser instanceof ou la méthode getNodeType() pour filtrer les noeuds qui t'intéressent.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Par défaut
    Merci pour la réponse.

    Ce que je voulais savoir surtout, c'est si on pouvait supprimer ces #text dès le début sans avoir à refaire des tests après mais je ne trouve pas comment faire alors je me contente de cette solution.

  5. #5
    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,

    il existe une manière particulièrement propre et efficace pour supprimer les noeuds "blancs" non significatifs, c'est d'écrire une DTD pour ton vocabulaire XML et d'activer la validation, avec une commande du style :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    factory.setValidating(true);
    Si ta DTD comprend ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!ELEMENT noeud_pere (noeud_fils1, noeud_fils2)>
    le parseur XML va estimer, à juste titre, que tous les noeuds textuels frères de noeud_fils1 et noeud_fils2 ne font pas partie du modèle défini pour noeud_pere, et ne va donc pas les intégrer à l'arbre DOM, ce qui t'épargne d'avoir à les filtrer.

    Mis à part cela, il est toujours bon d'écrire une DTD pour le format XML qu'on crée, au minimum elle servira de documentation.
    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. problème de sélection d'un noeud dan un treeview
    Par TaymouWan dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/03/2009, 16h05
  2. [XPath] Problème de sélection de noeuds
    Par Heriquet dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/02/2006, 10h22
  3. [XSLT]Problème de séléction du noeud courrant
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/08/2005, 07h51
  4. Problème de sélection sous IE
    Par titisite dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/12/2004, 14h05
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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