Aller au contenu

Parser XML ISO-8859-1


Leavzou

Recommended Posts

Hello !

Pour faire court, j'ai deux classes qui, fonctionnant ensembles, arrivent parfaitement à parser une URL de fichier XML encodés en UTF-8.

Seulement, dès que je demande à ces classes de me parser du ISO-8859-1, tout plante !

voici les classes :

public class ContainerData
{
static public Context context;
static public final String sURL = "URL AVEC ISO-8859-1";

public ContainerData_cs_skgaming()
{
}
public static ArrayList<Feed> getFeeds_all()
{
 // On passe par une classe factory pour obtenir une instance de sax
 SAXParserFactory fabrique = SAXParserFactory.newInstance();
 SAXParser parseur = null;
 ArrayList<Feed> feeds = null;
 try {
  // On "fabrique" une instance de SAXParser
  parseur = fabrique.newSAXParser();
 } catch (ParserConfigurationException e) {
  e.printStackTrace();
 } catch (SAXException e) {
  e.printStackTrace();
 }

 // On défini l'url du fichier XML
 URL url = null;
 try {
  url = new URL(sURL);
 } catch (MalformedURLException e1) {
  e1.printStackTrace();
 }

 /*
  * Le handler sera gestionnaire du fichier XML c'est à dire que c'est lui qui sera chargé
  * des opérations de parsing. On vera cette classe en détails ci après.
 */
 DefaultHandler handler = new ParserXMLHandler_All();
 try {
  // On parse le fichier XML
  parseur.parse(url.openConnection().getInputStream(), handler);

  // On récupère directement la liste des feeds
  feeds = ((ParserXMLHandler_All) handler).getData();
 } catch (SAXException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }

 // On la retourne l'array list
 return feeds;
}

public static ArrayList<Feed> getFeeds_last()
{
 // On passe par une classe factory pour obtenir une instance de sax
 SAXParserFactory fabrique = SAXParserFactory.newInstance();
 SAXParser parseur = null;
 ArrayList<Feed> feeds = null;
 try {
  // On "fabrique" une instance de SAXParser
  parseur = fabrique.newSAXParser();
 } catch (ParserConfigurationException e) {
  e.printStackTrace();
 } catch (SAXException e) {
  e.printStackTrace();
 }

 // On défini l'url du fichier XML
 URL url = null;
 try {
  url = new URL(sURL);
 } catch (MalformedURLException e1) {
  e1.printStackTrace();
 }

 /*
  * Le handler sera gestionnaire du fichier XML c'est à dire que c'est lui qui sera chargé
  * des opérations de parsing. On vera cette classe en détails ci après.
 */
 DefaultHandler handler = new ParserXMLHandler_Last();
 try {
  // On parse le fichier XML
  parseur.parse(url.openConnection().getInputStream(), handler);

  // On récupère directement la liste des feeds
  feeds = ((ParserXMLHandler_Last) handler).getData();
 } catch (SAXException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }

 // On la retourne l'array list
 return feeds;
}
}

public class ParserXMLHandler_All extends DefaultHandler
{
private final String ITEM = "item";
private final String TITLE = "title";
private final String LINK = "link";
private final String PUBDATE = "pubDate";

private ArrayList<Feed> feeds;

private boolean inItem;

private Feed currentFeed;

private StringBuffer buffer;

@Override
public void processingInstruction(String target, String data) throws SAXException
{
 super.processingInstruction(target, data);
}
public ParserXMLHandler_All()
{
 super();
}

@Override
public void startDocument() throws SAXException
{
 super.startDocument();
 feeds = new ArrayList<Feed>();
}

@Override
public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException
{
 buffer = new StringBuffer();

 if (localName.equalsIgnoreCase(ITEM))
 {  
  this.currentFeed = new Feed();
  inItem = true;
 }

 if (localName.equalsIgnoreCase(TITLE))
 {
 }
 if (localName.equalsIgnoreCase(LINK))
 {
 }
 if (localName.equalsIgnoreCase(PUBDATE))
 {
 }
}

@Override
public void endElement(String uri, String localName, String name) throws SAXException
{
 if (localName.equalsIgnoreCase(TITLE))
 {
  if(inItem)
  {  
this.currentFeed.setTitle(buffer.toString());  
buffer = null;
  }
 }
 if (localName.equalsIgnoreCase(LINK))
 {
  if(inItem)
  {  
this.currentFeed.setLink(buffer.toString());  
buffer = null;
  }
 }
 if (localName.equalsIgnoreCase(PUBDATE))
 {
  if(inItem)
  {  
this.currentFeed.setPubDate(buffer.toString());  
buffer = null;
  }
 }
 if (localName.equalsIgnoreCase(ITEM))
 {
  feeds.add(currentFeed);
  inItem = false;
 }
}
public void characters(char[] ch,int start, int length) throws SAXException
{
 String lecture = new String(ch,start,length);
 if(buffer != null) buffer.append(lecture);	  
}

public ArrayList<Feed> getData()
{
 return feeds;
}
}

Le log des erreurs me parait peu utile.

En cherchant (beaucoup) sur le net, j'ai trouvé des "setEncoding" que j'ai essayé sans succès...

Des idées s'il vous plait ? =D

Lien vers le commentaire
Partager sur d’autres sites

"Tout plante" veut dire quoi ? Exception ? ... ? Peux-tu nous mettre une trace des logs qui se produisent ?

Ton contenu XML est-t'il bien encodé en ISO-8859-1 ?

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...