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 :

Lecture de XML et décision en fonction du contenu [DOM]


Sujet :

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

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Lecture de XML et décision en fonction du contenu
    Bonjour,
    Dans une classe Java, je souhaiterais lire un fichier XML et en fonction des valeurs des nodes, faire un traitement particulier (si c un 1, je met le TagName dans ma StringBuffer "resultat", sinon, si c un 0, je passe).
    Mon fichier XML a cet aspect:
    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
     
    <niveau root>
      <niveau_1>
        <niveau_1_1>
          <niveau_1_1_1>0</niveau_1_1_1>
          <niveau_1_1_2>1</niveau_1_1_2>
          ...
          <niveau_1_1_n>1</niveau_1_1_n>
        <niveau_1_2>
        ....
        </niveau_1_2>
        ....
        ....
        <niveau_1_n>
        ...
        </niveau_1_n>
      <niveau_2>
      ...
      ...
      </niveau_2>
     
    et ainsi de suite...
    J'ai déjà fait la lecture du fichier et son passage en Document; il me reste la partie la plus importante et qui est comment faire pour arriver à me
    positionner sur les valeurs des nodes et les passer une par une.

    Quelqu'un aurait un bout de code qui pourrait m'aider svp? Juste par exemple, pour les nodes du niveau_1_1?

    Merci d'avance.

  2. #2
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    Voici un bout de code qui permet de réaliser ceci :
    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
     
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
     
    public class Test
    {
    	public static void main(String[] args) throws Exception
    	{
    		new Test(args[0]);
    	}
     
    	public Test(String filename) throws Exception
    	{
    		Element root = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(filename).getDocumentElement();
    		StringBuffer resultat = new StringBuffer("=>");
    		search(root,resultat);
    		System.out.println(resultat);
    	}
     
    	public void search(Element element,StringBuffer result)
    	{
    		NodeList list = element.getChildNodes();
    		for(int i=0;i<list.getLength();i++)
    		{
    			Node n = list.item(i);
    			if(n instanceof Text)
    			{
    				Text t = (Text)n;
    				if(t.getData().trim().equals("1")) result.append(":"+element.getTagName());
    			}
    			else if (n instanceof Element)
    			{
    				Element e = (Element)n;
    				search(e,result);
    			}
    		}
    	}
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup Debernad pour ton bout de code mais comme j'ai fait, ça ne marche pas, je colle ci-dessous mes codes:
    Mon 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
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <affichage>
    	<affichage_cb6>
    		<detaille_cb6>
    			<montant>1</montant>
    			<montant_cv>1</montant_cv>
    			<codedvsalpha>1</codedvsalpha>
    			<codemonnaie>1</codemonnaie>
    			<pan>1</pan>
    			<numcomm>1</numcomm>
    			<nom_comm>1</nom_comm>
    			<adresse_comm>1</adresse_comm>
    			<dateheure>1</dateheure>
    			<dateheuretrnsc3>1</dateheuretrnsc3>
    			<dateheuredemande>1</dateheuredemande>
    			<dateheurereponse>1</dateheurereponse>
    			<deltareponse>1</deltareponse>
    			<numtpv>1</numtpv>
    		</detaille_cb6>
    		<condense_cb6>
    			<montant>1</montant>
    			<codedvsalpha>1</codedvsalpha>
    			<pan>1</pan>
    			<numcomm>1</numcomm>
    			<dateheure>1</dateheure>
    			<numtpv>1</numtpv>
    			<caissiere>1</caissiere>
    			<codetraitement>1</codetraitement>
    		</condense_cb6>
    	</affichage_cb6>
     
    	<affichage_chq>
    		<detaille_chq>
    			<montantfrf_chq>1</montantfrf_chq>
    			<montanteur_chq>1</montanteur_chq>
    			<etablissement_chq>1</etablissement_chq>
    			<compensation_chq>1</compensation_chq>
    			<localite_chq>1</localite_chq>
    			<codesinterieurs_chq>1</codesinterieurs_chq>
    			<numcheque_chq>1</numcheque_chq>
    			<numcomm_chq>1</numcomm_chq>
    			<dateheure_chq>1</dateheure_chq>
    			<cmc7_chq>1</cmc7_chq>
    			<numterm_chq>1</numterm_chq>
    			<itrace_chq>1</itrace_chq>
    		</detaille_chq>
    		<condense_chq>
    			<montanteur_chq>1</montanteur_chq>
    			<numcomm_chq>1</numcomm_chq>
    			<dateheure_chq>1</dateheure_chq>
    			<cmc7_chq>1</cmc7_chq>
    			<numterm_chq>1</numterm_chq>
    			<codetraitement_chq>1</codetraitement_chq>
    			<caissiere_chq>1</caissiere_chq>
    		</condense_chq>
    	</affichage_chq>
     
    	<affichage_amx>
    		<detaille_amx>
    			<montantfrf_amex>1</montantfrf_amex>	
    			<montanteur_amex>1</montanteur_amex>
    			<pan_amex>1</pan_amex>
    			<numcomm_amex>1</numcomm_amex>
    			<dateheure_amex>1</dateheure_amex>
    			<numtpv_amex>1</numtpv_amex>
    			<itrace_amex>1</itrace_amex>
    			<numtrace_amex>1</numtrace_amex>
    			<codetraitement_amex>1</codetraitement_amex>
    			<condsaisie_amex>1</condsaisie_amex>
    			<iso2_amex>1</iso2_amex>
    			<codemonnaie_amex>1</codemonnaie_amex>
    			<etat_amex>1</etat_amex>
    			<typeauto_amex>1</typeauto_amex>
    		</detaille_amx>
    		<condense_amx>
    			<montanteur_amex>1</montanteur_amex>
    			<pan_amex>1</pan_amex>
    			<numcomm_amex>1</numcomm_amex>
    			<dateheure_amex>1</dateheure_amex>
    			<numtpv_amex>1</numtpv_amex>
    			<codetraitement_amex>1</codetraitement_amex>
    			<codemonnaie_amex>1</codemonnaie_amex>
    			<caissiere_amex>1</caissiere_amex>
    		</condense_amx>
    	</affichage_amx>
     
    	<affichage_ctm>
    		<detaille_ctm>
    			<ctree_ctm>1</ctree_ctm>            
    			<montant_ctm>1</montant_ctm>
    			<montantcv_ctm>1</montantcv_ctm>
    			<pan_ctm>1</pan_ctm>
    			<numcomm_ctm>1</numcomm_ctm>
    			<dateheure_ctm>1</dateheure_ctm>
    			<numterm_ctm>1</numterm_ctm>
    			<itrace_ctm>1</itrace_ctm>
    			<numtrace_ctm>1</numtrace_ctm>
    			<codetraitement_ctm>1</codetraitement_ctm>
    			<condsaisie_ctm>1</condsaisie_ctm>
    			<iso2_ctm>1</iso2_ctm>
    			<codesecr_ctm>1</codesecr_ctm>
    			<codeoption_ctm>1</codeoption_ctm>
    		</detaille_ctm>
    		<condense_ctm>
    			<montant_ctm>1</montant_ctm>
    			<numcomm_ctm>1</numcomm_ctm>
    			<dateheure_ctm>1</dateheure_ctm>
    			<numterm_ctm>1</numterm_ctm>
    			<codetraitement_ctm>1</codetraitement_ctm>
    			<caissiere_ctm>1</caissiere_ctm>
    			<codemonnaie_ctm>1</codemonnaie_ctm>
    		</condense_ctm>
    	</affichage_ctm>
    </affichage>
    et mon code Java:
    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
     
    public String selection_champs() throws SAXException, IOException, ParserConfigurationException, FactoryConfigurationError{
    		StringBuffer champs_sel = new StringBuffer();
    		Element root = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(filename).getDocumentElement(); 
    			NodeList aff_cb6 = root.getElementsByTagName("affichage_cb6");
    			if(aff_cb6.getLength()>0){ 
    				Element aff_bancaire = (Element) aff_cb6.item(0); 
    				if(type_list.compareTo("condense")==0){
    					NodeList aff_cb6_cond = root.getElementsByTagName("condense_cb6");
    					if(aff_cb6_cond.getLength()>0){
    						Element aff_bancaire_cond = (Element) aff_cb6_cond.item(0);
    						champs_sel.append(aff_bancaire_cond.getTagName());
    						search(aff_bancaire_cond,champs_sel);
    					}
    				}
    				else if(type_list.compareTo("detaille")==0){
    					NodeList aff_cb6_deta = root.getElementsByTagName("detaille_cb6");
    					if(aff_cb6_deta.getLength()>0){
    						Element aff_bancaire_deta = (Element) aff_cb6_deta.item(0);
    						champs_sel.append(aff_bancaire_deta.getTagName());
    						search(aff_bancaire_deta,champs_sel);
    					}
    				}
    			}
    		return champs_sel.toString();
    	}
     
    	public void search(Element element,StringBuffer result){
    		NodeList list = element.getChildNodes(); 
    		for(int i=0;i<list.getLength();i++){ 
    			Node n = list.item(i); 
    			if(n instanceof Text){
    				Text t = (Text)n; 
    	            if(t.getData().trim().equals("1")){
    	            	if (result != null)
    	            		result.append(",");
    	            	result.append(element.getTagName());
    	            }
    	         } 
    	         else if (n instanceof Element){ 
    	         	Element e = (Element)n; 
    	         	search(e,result); 
    	         }
    		} 
    	}
    Et ça ne marche quand même pas.
    Le problème c'est que si je ne garde que ce qu'il y a entre les balises <affichage_cb6> dans le fichier XML et que je vire <affichage_chq>, <affichage_amx>... ça marche mais quand je rajoute ces dernières, ça ne marche plus...
    quelqu'un pourrait revoir ça avec moi svp??
    Merci d'avance...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut
    Tu veux faire quoi exactement avec ton fichier, le lire, écrire, etc...???
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    C'est marqué plus haut
    je veux faire un test sur les textes des noeuds et en fonction de ces derniers, j'effectue un traitement particulier...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Points : 40
    Points
    40
    Par défaut
    tu as dit que ça marchait pour tout ce qu'il y a entre les balises <affichage_cb6>, mais est ce que tu as un autre bout de code? Car si tu n'as pas d'autre code, je pense que tu devrais tester ton code en changeant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList aff_cb6 = root.getElementsByTagName("affichage_cb6");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList aff_cb6 = root.getElementsByTagName("affichage_chq");
    cetle ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList aff_cb6_cond = root.getElementsByTagName("condense_cb6");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList aff_cb6_cond = root.getElementsByTagName("condense_chq");
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList aff_cb6_deta = root.getElementsByTagName("detaille_cb6");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList aff_cb6_deta = root.getElementsByTagName("detaille_chq");
    Si j'ai bien compris ton code, il devrait t'afficher tout ce qu'il y a entre les balises <affichage_chq>.

    Autre chose, comment appelles tu la méthode ?
    Si tu tapes ta tête contre une cruche et que ça sonne creux, ce n'est pas forcément la cruche qui est vide !!
    Mes topics sont tabous, vous en viendrez tous à bout.

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Ma méthode, je l'appele dans mon code JSP.
    En fait, tout marche bien, je suis désolé, il y avait une seule balise qui n'était pas correctement fermée et qui foutait le désordre (je ne les avait pas mises toutes parce que ça aurait fait très long)
    Donc, encore désolé et merci ...

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

Discussions similaires

  1. Lecture fichier xml aux caracteres accentués
    Par LFC dans le forum Modules
    Réponses: 2
    Dernier message: 13/02/2006, 19h45
  2. [Xml/XSl] utiliser des fonction vb
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/01/2006, 17h28
  3. Réponses: 3
    Dernier message: 09/12/2005, 17h42
  4. Réponses: 20
    Dernier message: 25/09/2005, 15h07
  5. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/07/2005, 18h11

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