IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Parsage de flux XHTML


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut Parsage de flux XHTML
    Bonjour,

    J'essaie en vain de parser un flux HTML. Mais voila j'ai une erreure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    org.jdom.input.JDOMParseException: Error on line 4: The entity "eacute" was referenced, but not declared.
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:807)
    	at com.datalion.keeweek.parser.XHTMLParser.<init>(XHTMLParser.java:26)
    	at com.datalion.keeweek.chess.ChessList.seek(ChessList.java:76)
    	at com.datalion.keeweek.chess.ChessList.main(ChessList.java:35)
    Caused by: org.xml.sax.SAXParseException: The entity "eacute" was referenced, but not declared.
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1189)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
    	... 4 more
    Caused by: org.xml.sax.SAXParseException: The entity "eacute" was referenced, but not declared.
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1189)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:807)
    	at com.datalion.keeweek.parser.XHTMLParser.<init>(XHTMLParser.java:26)
    	at com.datalion.keeweek.chess.ChessList.seek(ChessList.java:76)
    	at com.datalion.keeweek.chess.ChessList.main(ChessList.java:35)
    Caused by: org.xml.sax.SAXParseException: The entity "eacute" was referenced, but not declared.
    	at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1189)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
    	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:807)
    	at com.datalion.keeweek.parser.XHTMLParser.<init>(XHTMLParser.java:26)
    	at com.datalion.keeweek.chess.ChessList.seek(ChessList.java:76)
    	at com.datalion.keeweek.chess.ChessList.main(ChessList.java:35)
    Exception in thread "main" java.lang.NullPointerException
    	at com.datalion.keeweek.parser.XHTMLParser.<init>(XHTMLParser.java:33)
    	at com.datalion.keeweek.chess.ChessList.seek(ChessList.java:76)
    	at com.datalion.keeweek.chess.ChessList.main(ChessList.java:35)
    quand je fais appel au constructeur de cette classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    package com.datalion.keeweek.parser;
     
    import java.io.InputStream;
    import java.util.Iterator;
    import java.util.Vector;
     
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.input.SAXBuilder;
     
    import com.datalion.keeweek.util.Chelou;
     
     
    public class XHTMLParser 
    {
    	private Document doc;
    	private Element root;
    	private SAXBuilder sxb;
       public XHTMLParser(InputStream stream)
       {
          this.sxb = new SAXBuilder();
          try
          {
        	  this.sxb.setEntityResolver(new Chelou());
        	  this.doc = this.sxb.build(stream);
     
          }
          catch(Exception e)
          {
        	  e.printStackTrace();
          }
          this.root = this.doc.getRootElement();
       }
    	/** Function to seek element by their class name 
             * @param Name of the class
             * @return A vector of element
             */
       public Vector<Element> getElementsByClassName(String name)
       {
    	   Vector<Element> elts = new Vector<Element>();
    	   Iterator it = this.root.getDescendants();
    		while(it.hasNext())
    		{
    			Object current = it.next();
    			if(current.getClass().getCanonicalName().equals("org.jdom.Element"))
    			{
    				Element elt = (Element) current;
    				if (elt.getAttribute("class") != null && elt.getAttributeValue("class").equals(name)) 
    				{
    					elts.add(elt);
    				}
    			}
    		}
    		return elts;
    	}
       /** Retrieve a unique element
       * @param The unique identifier of an element
       * @return An element
       */
       public Element getElementById(String uid)
       {
    	   Element wanted = null;
    	   Iterator it = this.root.getDescendants();
    		while(it.hasNext())
    		{
    			Object current = it.next();
    			if(current.getClass().getCanonicalName().equals("org.jdom.Element"))
    			{
    				Element elt = (Element) current;
    				if (elt.getAttribute("id") != null && elt.getAttributeValue("id").equals(uid)) 
    				{
    					wanted=elt;
    				}
    			}
    		}
    	   return wanted;
       }
       /** Get all elements which is of type given
        * @param The tag (input, textarea, div, p ...)
        * @return A vector of element contain each elements
        */
       public Vector<Element> getElementsByTagName(String tag)
       {
    	   Vector<Element> elts = new Vector<Element>();
    	   Iterator it = this.root.getDescendants();
    		while(it.hasNext())
    		{
    			Object current = it.next();
    			if(current.getClass().getCanonicalName().equals("org.jdom.Element"))
    			{
    				Element elt = (Element) current;
    				if (elt.getChild(tag)!=null) 
    				{
    					elts.add(elt);
    				}
    			}
    		}
    	   return elts;
       }
       /** Search a string in the XHTML page
        * @param A string
        * @return A vector of element contain each elements
        */
       public Vector<Element> search(String pattern)
       {
    	   Vector<Element> elts = new Vector<Element>();
    	   Iterator it = this.root.getDescendants();
    		while(it.hasNext())
    		{
    			Object current = it.next();
    			if(current.getClass().getCanonicalName().equals("org.jdom.Element"))
    			{
    				Element elt = (Element) current;
    			}
    		}
    	   return elts;
       }
     
    }
    je sais de quoi il s'agit mais j'ai beau chercher sur le net comment résoudre ce truc mais je trouve pas.
    Je sais qu'il s'agit des entités : JDOM n'arrive pas à les lire.
    est ce que quelqu'un pourrais me dire comment résoudre ça ?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on pourrais voir les xhtml? Vu que c'est lui qui est en erreur.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    on pourrais voir les xhtml? Vu que c'est lui qui est en erreur.
    lui il est pas dans l'erreur
    juste qu'il contient des entités XML (genre &eacute ...)

    mais si si tu tiens au HTML, tu l'obtiens quand tu cherche par nom et prénom si cette page (mettre un *)
    http://www.echecs.asso.fr/Joueurs.aspx

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu va avoir du mal a parser ce document avec un parseur xml, vu que c'est du html4 et non du xhtml. La validation xhtml avec les outils du w3c mentionne plus de 300 erreurs. Si tu veux parser des document html, je te recommande plutot des outils comme nekohtml, qui fonctionnent meme quand le html n'est pas 100% correct. Un pur parseur xml survi rarement aux pages web qui sont généralement mal foutues.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut
    oki merci pour l'info
    je fais ça se week end

  6. #6
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Bonsoir,

    Si tu veux parser du HTML, je te conseille nekoHTML qui est capable de parser des fichier HTML (XML non valide comme <input > au lieu de <input />)
    et de les charger dans un DOM w3c. Peut etre que ca resoudra ton probleme?

    Angelo

Discussions similaires

  1. [XSL] Parsage de flux XML
    Par AlexisB dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 21/04/2009, 12h31
  2. Socket Exception en parsant un flux XHTML
    Par sliderman dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 12/06/2008, 09h38
  3. [SimpleXML] Parsage de flux XML
    Par wac06 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/04/2008, 12h35
  4. Copie d'un flux dans un autre
    Par Morvan Mikael dans le forum Langage
    Réponses: 5
    Dernier message: 03/06/2003, 09h40
  5. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo