Extraire des donnees d'un fichier xml pour les utiliser

seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009 - 9 juil. 2009 à 01:12
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009 - 9 juil. 2009 à 16:50
bjr

je suis entrain de développer un bean pour parser un fichier xml pour extraire ses données dans une liste

voici le code


package ejb;


import java.io.File;

import java.io.IOException;

import java.util.LinkedList;

import java.util.List;

import java.util.jar.Attributes;

import javax.ejb.EJB;

import javax.ejb.Stateless;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

/**

*

* @author Administrateur

*/

@Stateless

public class parserBean extends DefaultHandler implements parserLocal {


//résultats de notre parsing

private List<Vol> horairevol;

@EJB

private Vol vol;


//flags nous indiquant la position du parseur

private boolean inHorairevol, inVol, inDepart, inDestination, inHeure, inDatevol, inCompagnie, inNvol,inCommentaire;


// simple constructeur

public parserBean(){

super();


}

//détection d'ouverture de balise

public void startElement(String uri,

String localName,

String qName,

Attributes attributes)

throws SAXException{

System.out.println(uri+" "+localName+" "+qName);

if(qName.equals("HoraireVol")){

horairevol = new LinkedList<Vol>();

inHorairevol = true;


}else if(qName.equals("Vol")){

vol = new Vol();

try{

short id = (short) Integer.parseInt(attributes.getValue("id"));

vol.setId(id);

}catch(Exception e){

//erreur, le contenu de id n'est pas un entier

throw new SAXException(e);

}

inVol = true;

}else if(qName.equals("depart")){

inDepart = true;

}else if(qName.equals("destination")){

inDestination = true;

}else if(qName.equals("heure")){

inHeure = true;

}else if(qName.equals("date")){

inDatevol = true;

}else if(qName.equals("compagnie")){

inCompagnie = true;

}else if(qName.equals("NVol")){

inNvol = true;

}else if(qName.equals("commentaire")){

inCommentaire = true;

}else{

//erreur, on peut lever une exception

throw new SAXException("Balise "+qName+" inconnue.");

}

}

//détection fin de balise

@Override

public void endElement(String uri,

String localName,

String qName)

throws SAXException{

if(qName.equals("HoraireVol")){

inHorairevol = false;

}else if(qName.equals("Vol")){

horairevol.add(vol);

vol = null;

inVol = false;

}else if(qName.equals("depart")){

inDepart = false;

}else if(qName.equals("destination")){

inDestination = false;

}else if(qName.equals("heure")){

inHeure = false;

}else if(qName.equals("date")){

inDatevol = false;

}else if(qName.equals("compagnie")){

inCompagnie = false;

}else if(qName.equals("NVol")){

inNvol = false;

}else if(qName.equals("commentaire")){

inCommentaire = false;

}else{

//erreur, on peut lever une exception

throw new SAXException("Balise "+qName+" inconnue.");

}

}

//détection de caractères

@Override

public void characters(char[] ch,

int start,

int length)

throws SAXException{

String lecture = new String(ch,start,length);

if(inDepart){

vol.setDepart(lecture);

}else if(inDestination){

vol.setDestination(lecture);

}else if(inHeure){

vol.setHeure(lecture);

}else if(inDatevol){

vol.setDatevol(lecture);

}else if(inCompagnie){

vol.setCompagnie(lecture);

}else if(inNvol){

vol.setNVol(Integer.parseInt(lecture));

}else if(inCommentaire){

vol.setCommentaire(lecture);

}

}

//début du parsing

@Override

public void startDocument() throws SAXException {

System.out.println("Début du parsing");

}

//fin du parsing

@Override

public void endDocument() throws SAXException {

System.out.println("Fin du parsing");

System.out.println("Resultats du parsing");

for(Vol p : horairevol){

System.out.println(p);

}

}


// test

public static void main(String[] args){

try{

// création d'une fabrique de parseurs SAX

SAXParserFactory fabrique = SAXParserFactory.newInstance();


// création d'un parseur SAX

SAXParser parseur = fabrique.newSAXParser();


// lecture d'un fichier XML avec un DefaultHandler

File fichier = new File("C:/Documents and Settings/Administrateur/Bureau/vol.xml");

DefaultHandler gestionnaire = new parserBean();

parseur.parse(fichier, gestionnaire);


}catch(ParserConfigurationException pce){

System.out.println("Erreur de configuration du parseur");

System.out.println("Lors de l'appel à SAXParser.newSAXParser()");

}catch(SAXException se){

System.out.println("Erreur de parsing");

System.out.println("Lors de l'appel à parse()");

se.printStackTrace();

}catch(IOException ioe){

System.out.println("Erreur d'entrée/sortie");

System.out.println("Lors de l'appel à parse()");

}

}


}

l'erreur est la suivante:

Exception in thread "main" java.lang.NullPointerException

elle se trouve dans la ligne rouge

kelkin peut m'aider car je coincé et j'ai besoin de cette liste pour
recuperer lé données qui doivent servir pour les autres beans

merci d'avance

9 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juil. 2009 à 07:54
Salut,

Difficile de t'aider sans connaître la syntaxe de ton fichier xml, à première vue, ca se produit parce que ton parseur trouve la balise "Vol" avant la balise "HoraireVol", et du coup la liste n'est pas initialisée lorsque tu essaie de l'utiliser.

Alors, soit tu l'initialise dès sa déclaration :
//résultats de notre parsing
private List<Vol> horairevol = new LinkedList<Vol>();

Soit tu mets un points d'arrêt dans ton code, et tu essaye de comprendre le cheminement de ton code.

Soit tu étudie la syntaxe de ton fichier xml pour comprendre ce qu'il se passe.
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
9 juil. 2009 à 13:19
j'ai essayé d'initialiser la liste chainé depuis le debut le parsing se fait mais le resultat n'ai pas bon:
Début du parsing
Fin du parsing
Resultats du parsing
null
null
null
null
BUILD SUCCESSFUL (total time: 0 seconds)

 sinon voici la structure de mon fichier vol.xml :

<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="vol.xsl"?>

<HoraireVol>

<Vol id="0">
   <depart>sdsds</depart>
   <destination>dfdfsd</destination>
   <heure>11:30</heure>
   <date>21-06-1986</date>
   <compagnie>sdssf</compagnie>
   <NVol>12222</NVol>
   <commentaire>ddfdfjdj</commentaire>
</Vol>

<Vol id="1">
   <depart>sdsds</depart>
   <destination>dfdfsd</destination>
   <heure>11:30</heure>
   <date>21-06-1986</date>
   <compagnie>sdssf</compagnie>
   <NVol>348505</NVol>
   <commentaire>fooeoedjod</commentaire>
</Vol>

<Vol id="2">
   <depart>sdsds</depart>
   <destination>dfdfsd</destination>
   <heure>11:30</heure>
   <date>21-06-1986</date>
   <compagnie>sdss</compagnie>
   <NVol>474557</NVol>
   <commentaire>dvdfndf</commentaire>
</Vol>

<Vol id="3">
   <depart>sdsds</depart>
   <destination>fdfsd</destination>
   <heure>11:30</heure>
   <date>21-06-1986</date>
   <compagnie>dssf</compagnie>
   <NVol>23384</NVol>
   <commentaire>lmcvdmc</commentaire>
</Vol>

</HoraireVol>

si ce chemin que j'ai opté ne marche pas svp aider moi à trouver une autre démarche pour extraire les données de ce fichier dans une structure de données car j'ai besion de ces données pour les autres beans.
je suis coincé il ya 2 jours et le temp presse
merci d'avance pour votre aide.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juil. 2009 à 14:05
Ben utilise Dom plutôt que SAX, ce sera bien plus simple pour parcourir ton fichier xml : au lieu d'avoir une approche événement, Dom a une approche objet : il construit tout l'arbre DOM du fichier xml en mémoire.

Utilise JDom par exemple
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
9 juil. 2009 à 14:11
et comment je peux recuperer les données dans une sturcture aprés le chargement de fichier xml dans la memoire ??
est ce que vous pouvez me fournir un exemple de code pour comprendre le principe de fonctionnement !!
merci beaucoup pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juil. 2009 à 14:25
Pour l'explication du principe de fonctionnement de JDom, je te laisse lire un tutorial sur le net, c'est vraiment pas compliqué !
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
9 juil. 2009 à 14:46
ok merci beaucoup
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
9 juil. 2009 à 16:08
j'ai telecharger jdom-1.1.zip mais j'ai pas pu l'ajouté à mon projé sous netbeans 6.5
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juil. 2009 à 16:44
Il te suffit de l'ajouter dans le classpath de ton application (ne me demande pas comment, je n'utilise pas netbeans)
0
seeif Messages postés 22 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 19 août 2009
9 juil. 2009 à 16:50
lol merci en tout cas
0
Rejoignez-nous