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 :

Bug JDOM avec XHTML


Sujet :

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

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut Bug JDOM avec XHTML
    Bonjour a tous, je rencontre un problème qui commence a m'enerver : diable !!

    J'utilise un parseur JDOM pour modifier mon arbre, supprimer des noeuds par exemple ...

    Le code marche niquel sur des fichiers Xml normal.
    mais quand je teste sur un fichier xhtml (censé etre du xml); avec l'entete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    et ben la plus rien ne marche, il me souleve une NULLPOINTER EXCEPTION au moindre getChild.
    Au moment du parse Xhtml par sax, pas de probleme, il trouve ça conforme et apres, il crashe pour effacer.

    Est ce que quelqun a deja rencontré de probleme, et si oui, comment le resoudre !

    Merci les amis !!

  2. #2
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    Salut moi je suis pas un expert ni de Java ni de XML mais je crois que ton fichier XML n'est pas bon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    ...
    Je crois que tous les balises XML doivent etre de type <xxx>yyy</xxx>.Tu dois avoir au moins un element(root).Dans ton code je vois <html ... > et cette balise n'est jamais fermee ! Je pense que d'ici provient ton problem.Peut-etre je me trompe peut-etre non

    Voila un tutoriel XML en example
    http://zvon.developpez.com/tutoriels/xml/
    Even the biggest journey, starts with a single step.

  3. #3
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    montre nous ton code! Peut etre que cela vient de ton code...

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Ok :

    Le fichier Xhtml, je le parse correctement avec Sax, et je le valide meme avec se dtd du xhtml.

    Avec Jdom, je trouve la racine = html, puis je trouve tous les fils de html (head, body).
    Mais apres dans body, y a rien qui va plus. Le but est de supprimer l'element setup de Connection et SQL de reseultset.

    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
     
    private boolean removeElements(Element TheRootElement)
    		{
    List Lall = TheRootElement.getChildren(); // = root
    				Iterator i = Lall.iterator();
    				boolean Flag = false; 
    				Element removeElements;		
    				Element Connection = TheRootElement.getChild("Connection");
    				boolean removed = false;
    				removed = Connection.removeChild("Setup");
    				removed = false;
    			    Element resultset = Connection.getChild("Resultset");
    			    Flag = resultset.removeChild("Sql");
    			    if(Flag == true && removed == true ){return true;}
    			    else{return false;}
    }
    Ce code marche niquel sur le fichier :

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
          <Tool Output="PHP">
            <Connection id="C1">
              <Setup>
                <Driver>org.gjt.mm.mysql.Driver</Driver>
                <LocationURL>jdbc:mysql://127.0.0.1</LocationURL>
                <Dbname>test</Dbname>
                <User>root</User>
                <Password>aaaaaaaa</Password>
              </Setup>
              <Resultset>
                <Sql>select * from teachers</Sql>
                <Display>
                  <table width="75%" border="1">
                    <Loop>
                      <tr>
                        <td rowspan="1" colspan="1">
                          <Field id="F1">name</Field>
                        </td>
                        <td rowspan="1" colspan="1">
                          <Field id="F2">salary</Field>
                        </td>
                        <td rowspan="1" colspan="1">
                          <Field id="F3">sdsdfsdfsdfsd</Field>
                        </td>
                      </tr>
                    </Loop>
                  </table>
                </Display>
              </Resultset>
            </Connection>
          </Tool>
    Par contre, le meme code buggue sur le fichier :

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
        <title>Example XHTML document</title>
      </head>
      <body>
        <p align="center">Example of Xhtml, static page</p>
        <br clear="none" />
        <br clear="none" />
        <br clear="none" />
        <div align="center">
          Juste avant Tool
          <Tool Output="PHP">
            <Connection id="C1">
              <Setup>
                <Driver>org.gjt.mm.mysql.Driver</Driver>
                <LocationURL>jdbc:mysql://127.0.0.1</LocationURL>
                <Dbname>test</Dbname>
                <User>root</User>
                <Password>aaaaaaaa</Password>
              </Setup>
              <Resultset>
                <Sql>select * from teachers</Sql>
                <Display>
                  <table width="75%" border="1">
                    <Loop>
                      <tr>
                        <td rowspan="1" colspan="1">
                          <Field id="F1">name</Field>
                        </td>
                        <td rowspan="1" colspan="1">
                          <Field id="F2">salary</Field>
                        </td>
                      </tr>
                    </Loop>
                  </table>
                </Display>
              </Resultset>
            </Connection>
          </Tool>
          Nous revoila apres tool
        </div>
        <p align="center">Â </p>
        <p>Â </p>
      </body>
    </html>
    9a buggue exactemement a la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TheRootElement.getChild("Connection");
    Il me trouve l'element Connection mais me renvoie une NULLPOINTEREXCEPTION a cause du GetChild.

    C'est bizarre non ?

    Vous pouvez tester cet exemple, j'utilise JDOM, le code du debut est :

    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
     
    public void doparse(Info_Tree infos)
    	   {
    	       try
    	       		{
    			       	System.out.println("on est dans doparse");
    			       	readFile("./Xml/completefile.xhtml");
    			       	System.out.println("fichier parsé");
    			       	boolean res= false;
    			        res = removeElements(document.getRootElement());
    			        saveFile("./Xml/removed.xhtml");
    			        step2(infos);
    		        }
    	        catch(Exception e)
    			{System.out.println("exception do parse " + e.getMessage());e.printStackTrace();}
    	   }
    Bref, je comprends pas trop ...

    Merci de m'aider en tout cas. :o

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 69
    Points : 71
    Points
    71
    Par défaut même problème
    J'ai exactement le même problème... Est-ce que tu as eue la réponse?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 69
    Points : 71
    Points
    71
    Par défaut solution
    Bon, j'ai eu le même problème avec des xhtml1-transitional.
    Avec le même programme lorsque je parsais un fichier xhtml normal, ça marchait, et si au fichier je rajoutais le doctype xhtml1-transitional, tout plante et j'ai les null pointer exceptions.

    Donc: au lieu d'utiliser getChild, il faut utiliser getChildren; et alors on parcourt la liste en testant si le item(i) est null ou pas.

    et le tour est joué.

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 156
    Points
    156
    Par défaut
    Sinon, XPath, c'est trop bien aussi...

Discussions similaires

  1. [TP] Bug Graphique avec certaines configurations
    Par Ripley dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 29/01/2006, 18h23
  2. [Conseil][Amélioration]Parser un Document (JDOM) avec SAX
    Par leminipouce dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 19/12/2005, 14h30
  3. [CSS] Bug IE avec height ne marche pas avec les %
    Par El Riiico dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/06/2005, 17h11
  4. Réponses: 2
    Dernier message: 01/07/2004, 11h05
  5. Bug Xerces2_1_0 avec C++ et Linux ??
    Par _marie_ dans le forum XML
    Réponses: 2
    Dernier message: 24/09/2003, 07h49

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