Bonjour à tous,
J'essaye de parser un flux XML avec SAX. J'utilise le code source publié sur ce site : "Exemple de gestion d'erreur lors d'un parsing avec SAX"
Le main() de ma classe PersonneHandler :
Mon flux 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 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("./ExempleSAX.xml"); DefaultHandler gestionnaire = new PersonneHandler(); parseur.parse(fichier, gestionnaire); }catch(ParserConfigurationException pce){ System.out.println("Erreur de configuration du parseur"); System.out.println("Lors de l'appel à SAXParser.newSAXParser()"+pce); }catch(SAXException se){ System.out.println("Erreur de parsing"); System.out.println("Lors de l'appel à parse()"+se); se.printStackTrace(); }catch(IOException ioe){ System.out.println("Erreur d'entrée/sortie"); System.out.println("Lors de l'appel à parse()"+ioe); } }
Le DTD associé :
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 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE annuaire SYSTEM "Annuaire.dtd" > <annuaire> <personne id="0"> <nom>nom0</nom> <prenom>prenom0</prenom> <adresse>adresse0</adresse> </personne> <personne id="1"> <nom>nom1</nom> <prenom>prenom1</prenom> <adresse>adresse1</adresse> </personne> </annuaire>
1. Si j'enlève la déclaration DOCTYPE du flux XML, le parsing se passe sans pb.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <!ELEMENT annuaire (personne*)> <!ELEMENT personne (nom,prenom,adresse)> <!ATTLIST personne id CDATA #REQUIRED> <!ELEMENT nom (#PCDATA) > <!ELEMENT prenom (#PCDATA) > <!ELEMENT adresse (#PCDATA)>
2. Avec le DOCTYPE le SAXParser lève l'exception suivante :
"Open Quote is expected for attribute "id" associated with an element type "personne""
Je ne comprend pas cette erreur de SAXParser, mon flux a l'air bien formé et valide, non ?
merci pour votre aide
Partager