kazhar
Accro à Web-IG
Sexe:
Messages: 126
Localisation: Lyon
|
Posté le:
Mar 21 Nov 2006 - 18:28 |
|
Bonjour,
Dans le cadre de la réalisation d'un lecteur RSS en Java, je cherche à parser un document XML (jusque là, rien d'anormal)
J'ai une classe RssItem qui contient chacun des items de mon flux.
Code: |
public class RssItem {
int Read;
private String UrlItem, TitleItem, DescItem, PubDate;
public static int nbUnread;
/* Constructeur
* Argument : item déjà lu ou non */
public RssItem(int isread) {
Read = isread;
UrlItem = "";
TitleItem = "";
DescItem = "";
PubDate = "";
//Si le sujet est pas lu, on incrémente le compteur
if (Read == 0) {
nbUnread = nbUnread + 1;
}
}
public void setUrl(String U) {
UrlItem = U;
}
public void setTitle(String T) {
TitleItem = T;
}
public void setDesc(String D) {
DescItem = D;
}
public void setDate(String D) {
PubDate = D;
}
/* retourne le fait que l'item ait déjà été lu ou non */
public boolean isRead() {
if (Read == 0) return false;
else return true;
}
public void setRead() {
if (Read == 0) {
Read = 1;
nbUnread = nbUnread - 1;
}
}
} |
Et une classe RefreshFeed, appellée dans une classe RssFeed, qui prends l'URL de mon feed, et qui ajoute tous mes items dans ma seconde classe (je ne gère pas encore la suppression des doublons)
Code: |
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
import java.io.*;
import java.util.*;
/**
* Classe RefreshFeed. Récupère les derniers items d'un flux passé en paramètre
*
* @author kazhar
* @version 0.1
*/
public class RefreshFeed extends DefaultHandler {
private RssItem el;
private ArrayList Items;
private StringBuffer buffer;
private String Ur;
/**
* Constructor for objects of class RefreshFeed
* @parameters Url adresse du flux
*/
public RefreshFeed(String Url) {
Ur = Url;
}
/**
* Parse le document, et place les items dans la variable locale Items
* @return boolean action réussie ou non
*/
public boolean refresh() {
try {
Items.clear();
//Création d'une "fabrique" de parseurs
SAXParserFactory fabrique = SAXParserFactory.newInstance();
// création d'un parseur
SAXParser parseur = fabrique.newSAXParser();
// lecture d'un fichier XML avec un DefaultHandler
File fichier = new File(Ur);
//Définition des actions
DefaultHandler gestionnaire = new DefaultHandler(){
//Début de document
public void startDocument() throws SAXException {
//On concoit l'arraylist qui contiendra les éléments
ArrayList it = new ArrayList();
}
//Fin de document
public void endDocument() throws SAXException {}
//Début élément
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equals("item")) {
el = new RssItem(0);
} else {
buffer = new StringBuffer();
}
}
//Fin élément
public void endElement(String uri, String localName, String qName) throws SAXException{
if (qName.equals("item")) {
Items.add(el);
} else if (qName.equals("title")) {
el.setTitle(buffer.toString());
} else if (qName.equals("link")) {
el.setUrl(buffer.toString());
} else if (qName.equals("description")) {
el.setDesc(buffer.toString());
} else if (qName.equals("PubDate")) {
el.setDate(buffer.toString());
}
}
//Texte
public void characters(char[] ch, int start, int length) throws SAXException{
String lecture = new String(ch,start,length);
if(buffer != null) buffer.append(lecture);
}
};
parseur.parse(fichier, gestionnaire);
return true;
} catch(ParserConfigurationException pce){
System.out.println("Erreur de configuration du parseur");
System.out.println("Lors de l'appel à newSAXParser()");
return false;
} catch(SAXException se){
System.out.println("Erreur de parsing");
System.out.println("Lors de l'appel à parse()");
return false;
} catch(IOException ioe){
System.out.println("Erreur d'entrée/sortie");
System.out.println("Lors de l'appel à parse()");
return false;
}
}
/**
* Renvoie les items obtenus lors du dernier refresh
* @return ArrayList des items récupérés
*/
public ArrayList get() {
return Items;
}
} |
Mon parseur est tiré du tutoriel SAX disponible sur developpez.com.
Cependant, quelconque soit l'url de mon flux, j'ai toujours une erreur d'entrée sortie.
Si quelqu'un s'est déjà amusé avec sax et à rencontré un problème similaire afin de me guider un minimum |
|
|
kazhar
Accro à Web-IG
Sexe:
Messages: 126
Localisation: Lyon
|
Posté le:
Mar 21 Nov 2006 - 20:05 |
|
Bon bon j'admets, je suis un boulet.
File() n'admet des String que pour les chemins locaux.
Avec une variable URI, ça fonctionne, excepté qu'il me renvoie un IllegalArgumentException, mais je vais chercher. |
|
|