Leavzou Posté(e) 29 décembre 2011 Share Posté(e) 29 décembre 2011 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 More sharing options...
chpil Posté(e) 3 janvier 2012 Share Posté(e) 3 janvier 2012 "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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.