Aller au contenu

programme java & xml


pathos_01

Messages recommandés

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

À 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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...