Extraire des donnees d'un fichier xml pour les utiliser
ramzi ramzi
Messages postés24Date d'inscriptionvendredi 22 septembre 2006StatutMembreDernière intervention31 mars 2010
-
18 mars 2008 à 19:51
mima -
26 déc. 2014 à 17:08
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");
}
// 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 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
public class AnalyseSAX extends DefaultHandler {
//declaration d'un matrice et les compteurs
//tableau pour recuperer les donnees extraitent du fichier
public List<List<String>> elementsAttributes = new ArrayList<List<String>>();
...
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
List<String> ligne = new ArrayList<String>();
ligne.add(eName);
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
ligne.add(attrs.getValue(i));
}
}
elementsAttributes.add(ligne);
}
...
public void affichage_tab() {
System.out.println("");
System.out.println("le tableau");
for (List<String> line : elementsAttributes) {
for (String column : line) {
System.out.print(column+" ");
}
System.out.println("");
}
}
}
ramzi ramzi
Messages postés24Date d'inscriptionvendredi 22 septembre 2006StatutMembreDernière intervention31 mars 2010 21 mars 2008 à 00:25
j'ai essayee votre proposition , mais toujours pas de resultat a l'affichage..... ,,, le ArrayListe tout comme le matrice est vide , ca me gene beaucoup car le reste du programme que je fait s'arretera a cause de cette diffuculté (tout ce que je veut est de recuperer les element et leur attributs et les utiliser comme des variables pour les autres classes)
le temp passe si vite et moi je ne reste coinsee a cause de cette difficulte qui apparaitre rien devant les experts....
KaouechZoubeir
Messages postés1Date d'inscriptionvendredi 11 avril 2008StatutMembreDernière intervention 5 janvier 2009 5 janv. 2009 à 10:22
Salut a tous
Je veux créer un passeur qui extraire les données (nom des classes , leurs attributs,les jointures et les types du jointure(many to many,one to many ....) d'un fichier xmi et les sauvegarder dans une ArrayList .
Le probleme c'est que je ne connait pas la structure du fichier xmi. Je suis bloqué.
Y a t'il une solution???
foued1986a
Messages postés2Date d'inscriptionvendredi 20 février 2009StatutMembreDernière intervention 7 mai 2010 30 mars 2010 à 19:11
Salut a tous
mon probleme c'est que je suis en train de realiser un lemmatiseur de la
langue arabe , quelqu'un ma dit d'utiliser un fichier xml pour extraire des données en lui considéré comme une base des données
ramzi ramzi
Messages postés24Date d'inscriptionvendredi 22 septembre 2006StatutMembreDernière intervention31 mars 2010 31 mars 2010 à 11:35
Oui tu peut faire ca,
commence d'abords de lire des ouvrages sur XML pour déterminer son importance concernant ton projet, et s'il est la meilleur solution pour ton problème.