Salut a tous
J'ai creer un parseur SAX qui extraire les donnee (element et leurs attributs) et les affiches dans la sortie standard(console)
j'ai ajoutee ainsi quelques lignes pour recuperer ces donnees dans un matrice pour les utiliser dans d'autres algorithmes , mais la compilation a generer des erreurs
voici l'algorithme : pour le test
package parseuravecsax;
//Parse un document XML en java avec L'API SAX
//on importe les APIs necessaire pour l'analyse du XML
import javax.swing.*;
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 au fichierS
import java.io.*;
public class AnalyseSAX extends DefaultHandler
{
//declaration d'un matrice et les compteurs
public String[][] ELEMENTS_ATTRIBUTS; //tableau pour recuperer les donnees extraitent du fichier
int x = 0;
int y = 0;
//Methode principale
public void Parseur_fichier(String nomFichier)
{
//si le fichier qui est passe en argument est oublie --->erreur
if (nomFichier.isEmpty() == true)
{
System.out.println("erreur, Le fichier est endommagee ou il n'existe pas");
System.exit(1);
}
//on lance l'analyseur avec le fichier xml en parametre
DefaultHandler handler = new AnalyseSAX();
SAXParserFactory factory;
factory = SAXParserFactory.newInstance();
try
{
SAXParser saxparser = factory.newSAXParser();
saxparser.parse(new File(nomFichier), handler);
}
catch (Throwable t)
{
//Si on a une erreur pendant l'analyse
t.printStackTrace();
System.exit(1);
}
// System.exit(0);
}
//fin de L'analyse
//les methodes qui suivnet sont appelees automatiquement par l'analyseur
//lorsqu'un evenement est detectee dans le fichier xml
@Override
public void startDocument() throws SAXException
{
System.out.println("debut du document");
}
@Override
public void endDocument() throws SAXException
{
System.out.println("fin du document");
}
@Override
public void startElement(String namespaceURI, String sName, String qName, Attributes attrs) throws SAXException
{
String eName = sName;
if ("".equals(eName))
{
eName = qName;
}
System.out.println("balise ouverte:" + eName);
// recuperation de L'element trouvee dans le tableau --->ligne x colonne 0
ELEMENTS_ATTRIBUTS[x][0].concat(eName);
x += 1;
if (attrs != null)
{
//Listage des attributs
if (attrs.getLength() != 0)
{
System.out.println("Listage des parametres pour la balise " + eName + ":");
}
for (int i = 0; i < attrs.getLength(); i++)
{
String aName = attrs.getLocalName(i);//recuperation du nom de l'attribut
if ("".equals(aName))
{
aName = attrs.getQName(i);
}
System.out.println(" " + aName + "=\"" + attrs.getValue(i) + "\"");
//recuperation des valeurs des attributs dans les colonnes de tableau ---> par exemple ligne 1 colonne y
ELEMENTS_ATTRIBUTS[x][y].concat(attrs.getValue(i));
y = i;
}
}
}
@Override
public void endElement(String namespaceURI, String simpleName, String qualifiedName) throws SAXException
{
String nomElement = simpleName;
if (nomElement.equals(""))
{
nomElement = qualifiedName;
}
System.out.println("Balise fermée : " + nomElement);
}
@Override
public void characters(char[] ch, int start, int end) throws SAXException
{
String chaine = new String(ch, start, end);
chaine = chaine.trim();
if (!chaine.equals(""))
{
System.out.println("donnees : " + chaine);
}
}
public void affichage_tab()
{
System.out.println("");
System.out.println("le tableau");
for (int i = 0; i < ELEMENTS_ATTRIBUTS.length; i++)
{
for (int j = 0; j < ELEMENTS_ATTRIBUTS[i].length; j++)
{
System.out.println(ELEMENTS_ATTRIBUTS[i][j]);
}
}
}
}
....
pour les lignes en rouge L'erreur est provoquee car je n'ai pas initialiser le tableau
apres l'initialisation le programme marche mais apres l'execution de la methode en vert(affichage_tab) le tableau s'affichera avec les valeurs initials de la declaration faite
un solution.....?
:(