Kricek Posté(e) 23 août 2011 Share Posté(e) 23 août 2011 (modifié) Coucou tout le monde! Je recherche des infos sur le parseur SAX (Google est mon ami ^^) lorsqu'il est utilisé pour parser du HTML. Je vous arrête tout de suite, je suis dessus depuis plusieurs jours et je pense avoir écumé les sites et forums traitant du sujet. Mon problème est le suivant: Le parseur SAX est génial pour du XML, et pour du HTML TRES bien codé. Seulement voilà, le HTML que je récupère, visiblement, ne fait pas partie de cette catégorie. Et le hic, c'est que je n'ai pas accès au code source HTML. Du coup, à chaque fois qu'il rencontre un souci, le parseur s’interrompt et je me retrouve avec un array list d'objets vide (il y a un souci quasiment dès le début du document HTML)... Auparavant, je prenais directement le code HTML que je stockais dans une String puis je me débrouillais avec des substrings... Mais forcément, ça plantait dès qu'il y avait un caractère de décalage ou autres... Enfin, j'ai regardé du coté du DOM mais ça ne colle pas à ce que je voudrais faire. Bref, si quelqu'un avait quelques tuyaux sur comment parser du HTML avec SAX (ou un autre parseur, peu importe), un coup de main serait le bienvenu... :) Edit : Résolu. Il suffit de télécharger et d'installer le jar de tagsoup, de l'ajouter dans le buildpath. Ensuite, au lieu d'utiliser une instance de SAXParser, j'utilise une instance de "org.ccil.cowan.tagsoup.Parser" et cela fonctionne... Merci à Picogon! Modifié 23 août 2011 par Kricek Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
supergon Posté(e) 23 août 2011 Share Posté(e) 23 août 2011 Bingo, même problème que moi il y a quelques semaines, des balises doubles, des balises pas fermées, des attributs en double ... => http://home.ccil.org/~cowan/tagsoup/ (Download the TagSoup 1.2.1 jar file here. It's about 89K long.) Et voià, tu passe un coup de tagsoup avant de parser ton html et c'est nowel :) Par contre, si tu trouve la même chose pour parser en dom je prend ! Enjoy :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 23 août 2011 Auteur Share Posté(e) 23 août 2011 Simple et rapide... Merci Picogon, je teste ça tout de suite. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 23 août 2011 Auteur Share Posté(e) 23 août 2011 Bon, je dois m'y prendre comme un pied mais je n'arrive pas à l'implémenter... Voici ce que j'avais au départ: ... //Ici, je récupère l'InputStream de la page Web que je veux parser InputStream is = httpConn.getInputStream(); //parseur est une instance de SAXParser et handler, une instance de ma classe MyXMLHandler, dans laquelle j'ai mes méthodes "startElement", etc... parseur.parse(is, handler); ArrayList<Chapters> chaptersList = ((MyXMLHandler) handler).getBatimentsList(); ... Je pense avoir compris que je devais instancier un "org.ccil.cowan.tagsoup.Parser" à la place de mon SAXParser. Mais je n'arrive pas à m'en dépatouiller... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
supergon Posté(e) 23 août 2011 Share Posté(e) 23 août 2011 Tiens, une partie du code que j'ai écrit pour un début d'app : http://pastebin.com/3s3QgPJH j'ai du modifier quelques lignes / valeurs dans le code (pas envie de diffuser le principe du projet xD), possible que yai 2/3 incohérences donc, mais l'idée est là Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 23 août 2011 Auteur Share Posté(e) 23 août 2011 Merci pour le bout de code... Mais petite question... Tu instancies "parseur" mais tu ne t'en sers jamais? donc l'instance de SAXParser ne sert pas? Tu utilises seulement l'instance de Parser? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
supergon Posté(e) 23 août 2011 Share Posté(e) 23 août 2011 Effectivement, tu dois pouvoir le supprimer :) (les incohérences viennent du fait que comme toi, j'avais d'abord un fonctionnement "classique" puis j'ai rajouté tagsoup) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 23 août 2011 Auteur Share Posté(e) 23 août 2011 Ok... Génial... Ça a l'air de fonctionner... Merci beaucoup pour ta rapidité et tes explications! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 24 août 2011 Auteur Share Posté(e) 24 août 2011 Question subsidiaire : Dans le code HTML suivant: <span class="level"> <span class="textlabel">Toto</span> 5 </span> Est-ce que quelqu'un aurait une idée de comment coder mon handler pour récupérer le chiffre? A quel moment? Sachant que le tag intérieur ne m'intéresse pas... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.