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

XML/XSL et SOAP Discussion :

[DOM][Java] Problème avec le retour de getNodeName()


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 24
    Points : 14
    Points
    14
    Par défaut [DOM][Java] Problème avec le retour de getNodeName()
    Bonjour,
    Je rencontre un problème d'affichage lorsque j'utilise la fonction getNodeName() quand j'affiche les infos sur des noeuds de mon fichier xml.
    Le souci est que cette fonction me retourne non seulement le nom, mais aussi le type du noeud sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    nom: Flactif
    #text: 
     
    prenom: Olivier
    #text: 
     
    contrat: Tous risques
    #text:
    Y a-t-il un moyen de supprimer l'affichage de '#text'? Je vous envoie ma fonction et le xml. Merci d'avance pour any help:
    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
    public static void retournerClientParNom(String nom) {
    		NodeList noeuds = null;
    		XPath xpath = XPathFactory.newInstance().newXPath();
    		InputSource inputSource = new InputSource("./xml/bd1.xml");
    		String expression = "/bd//client[nom ='" + nom + "']";
    		try {
    			noeuds = (NodeList)xpath.evaluate(expression, inputSource, XPathConstants.NODESET);
    			if(noeuds != null) {
    			      Node node = noeuds.item(0);
    			      NodeList clientInfo = node.getChildNodes();
    			      for (int i = 0; i < clientInfo.getLength(); i++) { 
    			    	  Node child = clientInfo.item(i);
    			    	  System.out.println(child.getNodeName()+": "+child.getTextContent());
    			      }
    			} 
    		} catch(XPathExpressionException e) {
    			e.printStackTrace();
    		}		
    	}
    Contenu de xml:
    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
    <?xml version="1.0" encoding="iso-8859-1"?>
    <bd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./bd1.xsd">
    <client>
    		<nom>Flactif</nom>
    		<prenom>Olivier</prenom>
    		<contrat id="2">Tous risques</contrat>
    		<dateDebut>2005-09-12</dateDebut>
    		<dateFin>2006-09-11</dateFin>
    		<dateNaissance>1972-02-04</dateNaissance>
    		<statut>fonctionnaire</statut>
    		<garantie>protection juridique</garantie>
    		<garantie>frais de santé</garantie>
    		<garantie>assistance accident</garantie>
    		<garantie>logement</garantie>
    		<garantie>appareils électriques</garantie>
    		<garantie>voiture</garantie>
    		<incident date="2006-01-03" objet="appareil electrique">vol</incident>
    		<compensation>145.0</compensation>
    	</client>

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

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

    ce n'est pas un problème d'affichage, le '#text' est ce que renvoie la fonction getNodeName() pour tous les noeuds textuels renvoyés, avec tous les autres noeuds fils de <client>, par la méthode getChildNodes. Ces noeuds textuels sont en fait les sauts de lignes après chaque balise fermante </nom>, </garantie>, </statut>, etc.

    Pour les filtrer, il suffit de tester le type du noeud et de n'autoriser l'affichage que pour les noeuds de type Element (les noeuds textuels ont le type TEXT_NODE) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (child.nodeType == Node.ELEMENT_NODE) { 
      System.out.println(child.getNodeName()+": "+child.getTextContent()); 
    }
    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

  3. #3
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    voici un tableau de ce qui est renvoyé par cette méthode ;-)
    http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Node.html

  4. #4
    Invité
    Invité(e)
    Par défaut Rectification
    Rectification il y avait une erreur dans le code ci-dessus, voici la correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (child.getNodeType() == Node.ELEMENT_NODE) { 
      System.out.println(child.getNodeName()+": "+child.getTextContent()); 
    }

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

Discussions similaires

  1. bdd java problème avec ResultSet
    Par moon96 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 28/04/2008, 23h06
  2. [JAXB] XSD to Java - problème avec "xs:any"
    Par Mat1664 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 31/01/2008, 16h19
  3. Réponses: 6
    Dernier message: 10/09/2007, 22h55
  4. [MySQL 5 + Java] Problème avec un champ TIME
    Par ultracoxy dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 08/07/2006, 09h25
  5. Problème avec le retour des procédures
    Par yagosacquet dans le forum SQL
    Réponses: 4
    Dernier message: 03/06/2006, 10h24

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