pathos_01 Posté(e) le 12 janvier 2009 Partager Posté(e) le 12 janvier 2009 Bonjour, j'ai un petit problème je lit un fichier XML avec Java (utilisation du parser SAX) je fais ceci package projetdinamv2; /** * <p>Title:SAXParserXML </p> * * <p>Description:Classe permettant la lecture d'un fichier XML </p> * * <p>Copyright: Copyright (c) 2008</p> * * <p>Company: </p> * * @author carneiro anthony * @version 1.0 */ // Parse un document XML en JAVA avec l'Api SAX //on importe les API necessaires //pour l'analyse du XML import org.xml.sax.SAXParseException; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; //pour l'acces aux fichiers import java.io.*; import java.util.ArrayList; import java.util.Vector; public class SAXParserXML extends DefaultHandler { public SAXParserXML() { try { jbInit(); } catch (Exception ex) { ex.printStackTrace(); } } boolean addAuthor; static ArrayList Author = new ArrayList(); //tableau dynamique pour le stockage des personnes public static void ParcourXML() { DefaultHandler handler = new SAXParserXML(); SAXParserFactory factory = SAXParserFactory.newInstance(); try { String URI ="http://anthony.carneiro.free.fr/projet/dblpmomo.xml"; SAXParser saxParser = factory.newSAXParser(); saxParser.parse(URI,handler); } catch (Throwable t) { //Si on a une erreur pendant l'analyse t.printStackTrace (); System.exit (1); } } /* public void error(SAXParseException e) throws SAXParseException { throw e; }*/ public void startDocument () throws SAXException { System.out.println("début du document"); } public void endDocument () throws SAXException { System.out.println("fin du document"); } public void startElement (String namespaceURI,String simpleName,String qualifiedName,Attributes attrs) throws SAXException { String qName = simpleName; if("".equals(qName)) { qName = qualifiedName; } if(qName.equalsIgnoreCase("author")) //vérification si balise author ou non { addAuthor = true; } if (attrs != null) { //listage des attributs if (attrs.getLength() != 0) //System.out.println("Paramètre pour " + qName + ":"); for (int i = 0; i < attrs.getLength(); i++) { String aName = attrs.getLocalName(i); //récupération du nom de l'attribut if ("".equals(aName)) { aName = attrs.getQName(i); } } } } public void endElement (String namespaceURI,String simpleName,String qualifiedName) throws SAXException { String nomElement = simpleName; if (nomElement.equals("")) { nomElement = qualifiedName; } addAuthor = false; } public static void affichageAuthor() /* pour lire les elements du tableau */ { System.out.println("Affichage du tableau de vecteur : "); for(int i=0;i<Author.size();i++) { System.out.println(Author.get(i)); } } public void characters (char[] ch, int start, int length) throws SAXException { String chaine = new String(ch, start, length); chaine = chaine.trim(); if(!chaine.equals("")) { } if(addAuthor) { Author.add(new String(ch,start,length)); // ajout des attributs dans le tableau de vector } } private void jbInit() throws Exception { } }// fin de la class ce qui me permet de lire mon fichier XML et stocker mes valeurs (authors) dans un tableau le seul problème est que dès que mon programme trouve une balise /authors, il ne continue pas a lire la suite du XML !!!! Comment faire ??? Voici le XML : <?xml version="1.0" encoding="iso-8859-1"?> <dblp> <incollection mdate="2002-01-03" key="books/acm/kim95/AnnevelinkACFHK95"> <author>Jurgen Annevelink</author> <author>Rafiul Ahad</author> <author>Amelia Carlson</author> <author>Daniel H. Fishman</author> <author>Michael L. Heytens</author> <author>William Kent</author> <title>Object SQL - A Language for the Design and Implementation of Object Databases.</title> <pages>42-68</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#AnnevelinkACFHK95</url> </incollection> <incollection mdate="2002-01-03" key="books/acm/kim95/Blakeley95"> <author>José A. Blakeley</author> <title>OQL[C++]: Extending C++ with an Object Query Capability.</title> <pages>69-88</pages> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#Blakeley95</url> <year>1995</year> </incollection> <incollection mdate="2004-03-08" key="books/acm/kim95/BreitbartGS95"> <author>Yuri Breitbart</author> <author>Hector Garcia-Molina</author> <author>Abraham Silberschatz</author> <title>Transaction Management in Multidatabase Systems.</title> <pages>573-591</pages> <booktitle>Modern Database Systems</booktitle> <crossref>books/acm/Kim95</crossref> <url>db/books/collections/kim95.html#BreitbartGS95</url> <year>1995</year> </incollection> <incollection mdate="2004-03-08" key="books/acm/kim95/BreitbartR95"> <author>Yuri Breitbart</author> <author>Tom C. Reyes</author> <title>Overview of the ADDS System.</title> <pages>683-701</pages> <booktitle>Modern Database Systems</booktitle> <crossref>books/acm/Kim95</crossref> <url>db/books/collections/kim95.html#BreitbartR95</url> <year>1995</year> </incollection> -<incollection mdate="2002-01-03" key="books/acm/kim95/ChristodoulakisK95"> <author>Stavros Christodoulakis</author> <author>Leonidas Koveos</author> <title>Multimedia Information Systems: Issues and Approaches.</title> <pages>318-337</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#ChristodoulakisK95</url> </incollection> <incollection mdate="2002-01-03" key="books/acm/kim95/DayalHW95"> <author>Umeshwar Dayal</author> <author>Eric N. Hanson</author> <author>Jennifer Widom</author> <title>Active Database Systems.</title> <pages>434-456</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#DayalHW95</url> </incollection> <incollection mdate="2002-01-03" key="books/acm/kim95/DittrichD95"> <author>Angelika Kotz Dittrich</author> <author>Klaus R. Dittrich</author> <title>Where Object-Oriented DBMSs Should Do Better: A Critique Based on Early Experiences.</title> <pages>238-254</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#DittrichD95</url> </incollection> <incollection mdate="2002-01-03" key="books/acm/kim95/Garcia-MolinaH95"> <author>Hector Garcia-Molina</author> <author>Meichun Hsu</author> <title>Distributed Databases.</title> <pages>477-493</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#Garcia-MolinaH95</url> </incollection> <incollection mdate="2002-01-03" key="books/acm/kim95/Goodman95"> <author>Nathan Goodman</author> <title>An Object-Oriented DBMS War Story: Developing a Genome Mapping Database in C++.</title> <pages>216-237</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#Goodman95</url> </incollection> <incollection mdate="2002-01-03" key="books/acm/kim95/Kaiser95"> <author>Gail E. Kaiser</author> <title>Cooperative Transactions for Multiuser Environments.</title> <pages>409-433</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#Kaiser95</url> </incollection> <incollection mdate="2004-03-08" key="books/acm/kim95/KelleyGKRG95"> <author>William Kelley</author> <author>Sunit K. Gala</author> <author>Won Kim</author> <author>Tom C. Reyes</author> <author>Bruce Graham</author> <title>Schema Architecture of the UniSQL/M Multidatabase System</title> <booktitle>Modern Database Systems</booktitle> <crossref>books/acm/Kim95</crossref> <pages>621-648</pages> <year>1995</year> <url>db/books/collections/kim95.html#KelleyGKRG95</url> </incollection> <incollection mdate="2002-01-03" key="books/acm/kim95/KemperM95"> <author>Alfons Kemper</author> <author>Guido Moerkotte</author> <title>Physical Object Management.</title> <pages>175-202</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#KemperM95</url> </incollection> <incollection mdate="2002-01-03" key="books/acm/kim95/Kim95"> <author>Won Kim</author> <title>Introduction to Part 1: Next-Generation Database Technology.</title> <pages>5-17</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#Kim95</url> </incollection> <incollection mdate="2002-01-03" key="books/acm/kim95/Kim95a"> <author>Won Kim</author> <title>Object-Oriented Database Systems: Promises, Reality, and Future.</title> <pages>255-280</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#Kim95a</url> </incollection> </dblp> Autre part, ceci est un XML test !!! le vrai XML fais environ 600 Mo mais dès je travail avec ca me met une erreur du type : org.xml.sax.SAXParseException: Lanalyseur a atteint la limite dexpansion de lentité "{0}" définie par lapplication. donc voila, si qqn peut m'aider merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
pathos_01 Posté(e) le 12 janvier 2009 Auteur Partager Posté(e) le 12 janvier 2009 En gros ce que je veux faire c'est stocker (dans un tableau de vecteur) tout les noms des auteurs, les regrouper par incollection pour pouvoir ensuite travailler avec ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
BreizFenrir Posté(e) le 13 janvier 2009 Partager Posté(e) le 13 janvier 2009 À vue de nez, ton code est correct (malgré quelques bouts de code mort ici ou là, qui ne changent rien au fonctionnement global de ta classe). Tu saurais dire à quelle ligne l'erreur se produit ? (c'est indiqué dans le message d'erreur complet avec le détail de la pile d'appels) Une fois cette information connue, un coup de debug devrait pouvoir te permettre de déterminer quel est le problème qui se pose. Je ne peux malheureusement pas être beaucoup plus précis, n'ayant pas fait tourner ton code. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pathos_01 Posté(e) le 13 janvier 2009 Auteur Partager Posté(e) le 13 janvier 2009 Salut, merci de répondre En ce qui concerne le XML, j'ai résolue le problème me reste seulement cette erreur que je n'arrive pas a résoudre : org.xml.sax.SAXParseException: Lanalyseur a atteint la limite dexpansion de lentité "{0}" définie par lapplication. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 18 janvier 2009 Partager Posté(e) le 18 janvier 2009 ce ceode là if (attrs != null) { //listage des attributs if (attrs.getLength() != 0) //System.out.println("Paramètre pour " + qName + ":"); for (int i = 0; i < attrs.getLength(); i++) { String aName = attrs.getLocalName(i); //récupération du nom de l'attribut if ("".equals(aName)) { aName = attrs.getQName(i); } } } sert à rien. celui là if(!chaine.equals("")) { } if(addAuthor) { Author.add(new String(ch,start,length)); // ajout des attributs dans le tableau de vector } devrait être remplacé par un truc du genre if(addAuthor && (chaine.trim().length() > 0)) Author.add(chaine); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.