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 :

atteindre un élément en fin de noeud [DOM]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Par défaut atteindre un élément en fin de noeud
    bonjour !

    Je viens vous voir pour un petit problème dont je n'arrive pas à me défaire vu mes connaissances relativement faibles en xml/dom

    Je possède un fichier XML ayant à peu près cette structure.

    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
     
    <Contenus>
    		<Convention>
    			<codeConvention>xxxx</codeConvention>
    			<dateConvention>jjmmaaaa</codeConvention>
    			<entreprise>
    				<NomDeNaissance>Toto</NomDeNaissance>
    				<AdresseEtablissement>
    					<NumeroVoie>4</NumeroVoie>
    					<CodePostal>97139</CodePostal>
    				</AdresseEtablissement>
    				<CoordCaisseRetraite>
    					<Nom>Cgrr</Nom>
    					<AdresseFac>
    						<NumeroVoie>7</NumeroVoie>
    						<CodePostal>97110</CodePostal>
    					</AdresseFac>
    				</CoordCaisseRetraite>
    			</entreprise>
    		</Convention>
    		<Convention>
    			<codeConvention>yyyyy</codeConvention>
    			<dateConvention>jjmmaaaa</codeConvention>
    			<entreprise>
    				<NomDeNaissance>Titi</NomDeNaissance>
    				<AdresseEtablissement>
    					<NumeroVoie>4</NumeroVoie>
    					<CodePostal>97139</CodePostal>
    				</AdresseEtablissement>
    				<CoordCaisseRetraite>
    					<Nom>Cgrr</Nom>
    					<AdresseFac>
    						<NumeroVoie>7</NumeroVoie>
    						<CodePostal>97110</CodePostal>
    					</AdresseFac>
    				</CoordCaisseRetraite>
    			</entreprise>
    		</Convention>
    </Contenus>
    Le but de ce que je tente de faire est donc de récupérer les valeurs du fichier mais pour ce faire, il faut que je passe par un tableau de correspondance qui ressemble à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    tableauCorrespondance[0]="codeConvention";
    tableauCorrespondance[1]="dateConvention";
    tableauCorrespondance[2]="entreprise.NomDeNaissance";
    tableauCorrespondance[3]="entreprise.AdresseEtablissement.NumeroVoie";	
    tableauCorrespondance[4]="entreprise.AdresseEtablissement.CodePostal";
    tableauCorrespondance[5]="entreprise.CoordCaisseRetraite.Nom";
    tableauCorrespondance[6]="entreprise.CoordCaisseRetraite.AdresseFac.NumeroVoie";
    tableauCorrespondance[7]="entreprise.CoordCaisseRetraite.AdresseFac.CodePostal";
    Je tente d'atteindre donc ma valeur en faisant comme cela :

    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
     
    private String getTextValue(Element ele, String tagName) 
    {
    	String textVal = null;
    	NodeList nl = ele.getElementsByTagName(tagName);
    	if(nl != null && nl.getLength() > 0) 
    	{
    		Element el = (Element)nl.item(0);
    		if(el.getFirstChild() != null)
    		{
    			textVal = el.getFirstChild().getNodeValue();
    		}	
    	}
    	return textVal;
    }
    avec tagName = tableauCorrespondance[X].

    Cela fonction très bien pour les éléments directement sous "<Convention>" comme le "codeConvention" ou "dateConvention" mais pour atteindre directement "entreprise.AdresseEtablissement.NumeroVoie" par exemple comment dois je faire ? Je comprend ce qui ne tourne pas rond : je tente d'atteindre le tagName "entreprise.AdresseEtablissement.NumeroVoie", mais celui-ci n'existant pas sous cette forme, je recois null. Mais je ne vois pas comment faire pour atteindre directement "NumeroVoie" (surtout qu'il existe plusieurs "NumeroVoie" à diffèrents endroits du fichier et que je ne peux pas toucher à cela)

    Voici le code que j'utilise pour parcourir mon 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
    19
     
     
    DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
    DocumentBuilder constructeur = fabrique.newDocumentBuilder();
    Document document = constructeur.parse("monFichier.xml");
    Element racine = document.getDocumentElement();
     
    NodeList nodes = racine.getElementsByTagName("Convention");
    if(nodes != null && nodes.getLength() > 0) 
    {
    	for(int i = 0 ; i < nodes.getLength();i++) 
    	{
    		Element el = (Element)nodes.item(i);
    		for(int j=0;j<tableauCorrespondance.length;j++)
    		{
    			String valeur = getTextValue(el,tableauCorrespondance[j]);
    		}
    	}
    }
    Pouvez vous m'orienter vers une solution pour parcourir mon fichier et ainsi obtenir mes valeurs ?

    Je vous remercie !

    Pierre

  2. #2
    Membre chevronné
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Par défaut
    Bonjour,

    Cela fonction très bien pour les éléments directement sous "<Convention>" comme le "codeConvention" ou "dateConvention" mais pour atteindre directement "entreprise.AdresseEtablissement.NumeroVoie" par exemple comment dois je faire ?
    Avec XML, pour atteindre les elements d'un noeud, il faut leur parcourir. Ca marche pour codeConvention, dateConvention parce que tu demandes d'acceder directement aux noeuds conventions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NodeList nodes = racine.getElementsByTagName("Convention");
    Les "codeConvention" ou "dateConvention" etant des enfants de Convention pour cette raison tu obtiens les valeurs voulues.

    Pour avoir les autres valeurs tu dois modifier ton tableau tableauCorrespondance et ton programme par exemple

    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
     
    // NodeList nodes = racine.getElementsByTagName("Convention");
    tableauCorrespondance[0]="codeConvention";
    tableauCorrespondance[1]="dateConvention";
     
    //NodeList nodes = racine.getElementsByTagName("Convention/entreprise");
    tableauCorrespondance[2]="NomDeNaissance";
     
    //NodeList nodes = racine.getElementsByTagName("Convention/entreprise/AdresseEtablissement");
    tableauCorrespondance[3]="NumeroVoie";	
    tableauCorrespondance[4]="CodePostal";
     
    //NodeList nodes = racine.getElementsByTagName("Convention/CoordCaisseRetraite");
    tableauCorrespondance[5]="Nom";
     
    //NodeList nodes = racine.getElementsByTagName("Convention/CoordCaisseRetraite/AdresseFac");
    tableauCorrespondance[6]="NumeroVoie";
    tableauCorrespondance[7]="CodePostal";

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Par défaut
    bonjour et merci pour ta réponse

    Donc il faudrait que je redéfinisse à chaque fois mon nœud de départ pour me repositionner directement au bon endroit pour lire les fils directement c'est bien ca ? C'est à ça que correspondent les

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList nodes = racine.getElementsByTagName("Convention/entreprise");
    Cependant, je viens d'essayer avec cette définition de nœud et le nodes.getLength() est égal à 0

    Je vois à peu près ce qu'il faut faire, mais il me manque la coté technique du bouzin

    edit : en plus, j'ai beau parcourir le web, je trouve beaucoup d'exemple mais avec des fichiers XML "basiques" et non pas comme le mien avec des sous-sous-sous-nœud :/

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Il faut juste bien lire la documentation du XML DOM et les classes Document, Node et Element .
    DOM te retourne un arbre et pas un tableau d'objet donc pour accéder à un élément donné faut passé par racine.fils1.fils2....filsn.

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Je vais te proposer à un truc,
    Comme tu as dejà les tableau du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tableauCorrespondance[4]="entreprise.AdresseEtablissement.CodePostal";
    Pour atteindre par exemple le noeud CodePostal, tu prend la chaine contenu dans le tableau et tu recupere les differentes parties par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chaine.split('.');
    Ensuite dans une boucle tu avance jusqu'à atteindre le noeud que tu veux, sachant que le nom des noeux fils se trouvent dans le tableau retouner par le split.

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 3
    Par défaut
    bonjour

    En grattant un peu et avec vos indications, j'ai finalement réussi à faire quelque chose convenant à mes besoins

    Merci beaucoup pour vos réponses !

    Sujet Résolu

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

Discussions similaires

  1. Comment ajouter un élément en fin de liste ?
    Par Titi41 dans le forum Lisp
    Réponses: 8
    Dernier message: 20/06/2011, 03h46
  2. Atteindre un élément dans une div
    Par garfunk dans le forum jQuery
    Réponses: 2
    Dernier message: 05/05/2011, 09h59
  3. ajouter un élément à la fin d'un tableau [[],[],[]]
    Par wise_mind dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/06/2009, 16h01
  4. Réponses: 4
    Dernier message: 06/03/2009, 16h39
  5. [XSL] afficher tous les éléments fils d'un noeud
    Par alexandra dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 07/09/2006, 08h33

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