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 :

NullPointerException pendant le parsage d'un document XML [JDOM]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Par défaut NullPointerException pendant le parsage d'un document XML
    Bonjour à tous,

    je voudrais parser le fichier xml suivant :
    Code XML : 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <annuaire>
    	<personne>
    		  <nom>martin</nom>
    		  <prenoms nb="1">
    		  	<prenom>jean</prenom>
    		  </prenoms>
    	</personne>
    	<personne>
    		  <nom>chirac</nom>
    		  <prenoms nb="3">
    		  	<prenom>pierre</prenom>
    		  	<prenom>jacques</prenom>
    		  	<prenom>bill</prenom>
    	          </prenoms>
    	</personne>
    	<personne>
    		  <nom>smith</nom>
    		  <prenoms nb="2">
    		 	 <prenom>paul</prenom>
    		  	 <prenom>victor</prenom>
    		  </prenoms>
    	</personne>
    </annuaire>

    En fait, j'ai une méthode à laquelle je passe le nom de la personne
    en argument, et en sortie je veux récupérer une ArrayList
    contenant le nom, le nombre de prénoms et les prénoms.

    Exemple :
    Si j'ai: arraylist = readXML("chirac");alors arraylist doit contenir :

    chirac
    3
    pierre
    jacques
    bill
    J'ai fait le code suivant mais ça marche pas. J'ai une java.lang.NullPointerException
    à la ligne arraylist.add(element2.getChild("prenom").getText()); et je ne comprend pas pourquoi.
    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
     
    public class Test
    {
     
    	private static ArrayList arraylist;
    	private static org.jdom.Document document;
    	private static Element root;
     
    	public static void main(String[] args) 
    	{		
    		arraylist = new ArrayList();		
    		arraylist = readXML("chirac");
     
    		for(int i = 0; i<arraylist.size();++i)
    		{
    			System.out.println(arraylist.get(i));
    		}
    	}
     
    	private static ArrayList readXML(String nom)
    	{
    		SAXBuilder sxb = new SAXBuilder();
    		try
    		{
    			document = sxb.build(new File("config/xxx.xml"));
    		}
    		catch (JDOMException e)
    		{
    			e.printStackTrace();
    		}
    		catch (IOException e)
    		{
    			e.printStackTrace();
    		}
    		root = document.getRootElement();
    		Element personne = root.getChild("personne");
    		Element prenoms = personne.getChild("prenoms");
     
    		List list = root.getChildren("personne");
    		Iterator i = list.iterator();		
     
    		List list2 = prenoms.getChildren("prenom");
    		Iterator j = list2.iterator();
     
    		ArrayList arraylist = new ArrayList();
     
    		while (i.hasNext())
    		{
    	    		Element element = (Element) i.next();	
     
    	    		if (element.getChild("nom").getText().equals(nom))
    	    		{	    		
    	    			arraylist.add(element.getChild("nom").getText());
    	    			arraylist.add(element.getChild("prenoms").getAttributeValue("nb"));
    		    		while (j.hasNext())
    				{
    		    			Element element2 = (Element) j.next();
    		    			arraylist.add(element2.getChild("prenom").getText());		    		
    				}
    	    		}
    		}
    		return arraylist;
    	}
    }
    Merci pour votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Je t'ai déja répondu dans ton précédent message.
    Ton itérateur "j" reste sur la premiere personne alors que l'itérateur "i" les parcours tous.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Par défaut
    J'ai posté un nouveau message car le problème est légèrement différent de
    la dernière fois : contrairement à la dernière fois, je n'ai pas besoin de récupérer
    tous le prénoms de toutes les personnes, mais seulement ceux de la personne
    passer en argument.

    Je sais pas s'il s'agit d'un problème de l'itérateur "j" car il n'est plus sencé
    rester à la première personne.

    En tout cas, peux-tu me donner un bout de code pour que je puisse corriger mon problème, parce que je vois pas comment faire.

    merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ........
    while (i.hasNext())
    {
    	Element element = (Element) i.next();	
            Element prenoms = element.getChild("prenoms");
     
            List list2 = prenoms.getChildren("prenom");
    	Iterator j = list2.iterator();
    ......

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Par défaut
    Bon ben j'ai fait ce que tu m'as dit :
    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
     
    public class Test
    {
            private static ArrayList arraylist;
    	private static org.jdom.Document document;
    	private static Element root;
     
    	public static void main(String[] args) 
    	{		
    		arraylist = new ArrayList();		
    		arraylist = readXML("chirac");
     
    		for(int i = 0; i<arraylist.size();++i)
    		{
    			System.out.println(arraylist.get(i));
    		}
    	}
     
    	private static ArrayList readXML(String nom)
    	{
    		SAXBuilder sxb = new SAXBuilder();
    		try
    		{
    			document = sxb.build(new File("config/xxx.xml"));
    		}
    		catch (JDOMException e)
    		{
    			e.printStackTrace();
    		}
    		catch (IOException e)
    		{
    			e.printStackTrace();
    		}
    		root = document.getRootElement();
    		Element personne = root.getChild("personne");
     
    		List list = root.getChildren("personne");
    		Iterator i = list.iterator();		
     
    		ArrayList arraylist = new ArrayList();
     
    		while (i.hasNext())
    		{ 
    	    	     Element element = (Element) i.next();
    	    	     Element prenoms = element.getChild("prenoms");
    	    	     List list2 = prenoms.getChildren("prenom");
    		     Iterator j = list2.iterator();
     
    	    	     if (element.getChild("nom").getText().equals(nom))
    	    	     {
    	    		     arraylist.add(element.getChild("nom").getText());
    	    		      arraylist.add(element.getChild("prenoms").getAttributeValue("nb"));
    		    	     while (j.hasNext())
    			     {
    		    		    Element element2 = (Element) j.next();
    		    		    arraylist.add(element2.getChild("prenom").getText());		    		
    			    }
    	    	      }
    		}
    		return arraylist;
    	}
    }
    Mais j'ai toujours la même erreur au même endroit.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    "j" c'est l'itérateur des balises "prenom".
    Or tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element element2 = (Element) j.next();
    arraylist.add(element2.getChild("prenom").getText());
    Ce qui veut dire que t'essaie de trouver une sous-balise "prenom" à la courrante or t'en as aucune, donc pointeur null que tu ne teste pas et tu enchaines sur un getText().

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

Discussions similaires

  1. parsage du document XML avec C++
    Par lamia_01 dans le forum MFC
    Réponses: 4
    Dernier message: 07/07/2006, 13h26
  2. parsage du document XML avec C++
    Par lamia_01 dans le forum C++
    Réponses: 3
    Dernier message: 07/07/2006, 09h20
  3. Réponses: 3
    Dernier message: 03/06/2003, 13h16
  4. Stocker du texte mis en forme dans un document XML
    Par ovh dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 13/02/2003, 10h23
  5. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53

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