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

Qt Discussion :

[XML] Arbre DOM d'une page HTML et Qt4.4 (manque des noeuds)


Sujet :

Qt

  1. #1
    Membre confirmé Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Par défaut [XML] Arbre DOM d'une page HTML et Qt4.4 (manque des noeuds)
    salut,
    j'ai arriver a faire une application QT4 et webkit qui fait le chargement d'une page web puis affiche leur code html ,et maintenat je suis entrain de construire l'arbre dom de page html ,j'ai arrivé a construire l'arbre pour la racine de la page (les noeuds de la racine ) voila mon code :
    QDomElement racine = doc.documentElement(); //renvoie la balise racine
    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
       QDomNode noeud = racine.firstChild();  
     
     while (!noeud.isNull()) {
     
             if (noeud.isElement()) {
                    QDomElement e = noeud.toElement();
                    qDebug() << "Element name : " << e.tagName();
     
     
                    affichage = e.tagName(); 
     
     
                      QStringList attributes;
                      QDomNamedNodeMap emap = e.attributes();            
                    for(i=0;i<emap.length();++i) {
                                                           qDebug() << " la balise " <<e.tagName()<< "has attributs ::" ;
                                                           QDomNode attribute = emap.item(i);
                                                           attributes << attribute.nodeName() + "=\""
                                                           +attribute.nodeValue() + "\"";                                                
                                                           qDebug() <<attributes ;
     
     
                                                  }
     
                          listnode = e.childNodes();       //crée un tableau des enfants
     
                   for(i=0;i<listnode.length();i++) {
     
             					   n = listnode.item(i);
                					   affichage = affichage + " " + n.firstChild().toText().data();
                  					   QDomElement eaff = n.toElement(); 
                					   affichage = affichage + " " + eaff.tagName(); 
               					   qDebug() << "childs names de la balise  " <<e.tagName()<< "est : "<<eaff.tagName();
                                                       if (n.hasChildNodes ()) {
                                                               slistnode = eaff.childNodes(); 
                                                                 int k= eaff.childNodes().count();  qDebug()<<" k=== "<< k;
                                                      for(int k=0;k<slistnode.length();k++) {
     
             					    sn = slistnode.item(k);
                					   affichage = affichage + " " + sn.firstChild().toText().data();
                                                         QDomElement eafff = sn.toElement(); 
     
     
                                                                                  }}
          			                         }   if (!n.hasChildNodes ()) {qDebug()<<" 00000 ";} 
                                                       msg.setText(affichage);            //affichage dans un QMessageBox
          						   msg.exec();
     
                           }
            	 noeud = noeud.nextSibling();
     
     }
    comment je peux modifier mon code pour avoir afficher les noeuds des noeuds de la balise racine ??
    par exemple pour cette page html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html>
    <head>
    <title> premier test </title></head>
    <body><table border=9 height=100% width=100% bgcolor=skyblue>
    <tr>
     <td>
       <a href=culture.html target=blank> <b><u><font color=red> culture :</font></u></b><br> journée mondial pour les enfants </a>	
     
     </td>
    </tr>
    </table>
    </body>
    </html>
    il affiche que <title> est l'enfant de <head>
    et <table> est l'enfant de <body>
    comment je peux avoir aussi que <td> est l'enfant de <tr> et <a> l'enfant de <td>..ect ??? c'est a dire l'arbre dom de tous les balises ???,
    merci pour tout aide ;;;

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour.
    merci d'utiliser les balise (le # quand tu ecrit un message)

    as tu créé ton arbre par un parcours récursif des noeuds?

  3. #3
    Membre confirmé Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Bonjour.
    merci d'utiliser les balise (le # quand tu ecrit un message)

    as tu créé ton arbre par un parcours récursif des noeuds?
    salut;
    non j'ai pas fait un parcour récursif j'ai refflichi a ça, mais j'arriverai pas a le faire avec QT4 ,vous pouvez me donner des idées ??
    merci pour tout aide ;;

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Il faut que tu fasse une fonction récursive qui prenne un noeud en argument et qui :
    - affiche le nom de l'élément représenté par le noeud donné en argument
    - applique cette même fonction à tous les noeuds enfant du noeud donné en argument si le noeud en question a des noeuds enfants (ce sera ça qui va faire que la fonction ne va pas s'appeler elle-même un nombre infini de fois)

  5. #5
    Membre confirmé Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Par défaut
    Citation Envoyé par Alp Voir le message
    Il faut que tu fasse une fonction récursive qui prenne un noeud en argument et qui :
    - affiche le nom de l'élément représenté par le noeud donné en argument
    - applique cette même fonction à tous les noeuds enfant du noeud donné en argument si le noeud en question a des noeuds enfants (ce sera ça qui va faire que la fonction ne va pas s'appeler elle-même un nombre infini de fois)
    merci pour ces idées je vais essayer de le faire ;;
    bon developpement;;

  6. #6
    Membre confirmé Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Par défaut
    Citation Envoyé par Alp Voir le message
    Il faut que tu fasse une fonction récursive qui prenne un noeud en argument et qui :
    - affiche le nom de l'élément représenté par le noeud donné en argument
    - applique cette même fonction à tous les noeuds enfant du noeud donné en argument si le noeud en question a des noeuds enfants (ce sera ça qui va faire que la fonction ne va pas s'appeler elle-même un nombre infini de fois)
    salut ; merci pour l'idée je l'ai fait et ca marche bien mais pour des page HTML simple par exemple cette page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <html>
    <title> premier test </title>
    <table border=9 height=100% width=100% bgcolor=skyblue>
    <tr>
     <td>
       <a href=culture.html target=blank> <b><u><font color=red> culture :</font></u></b><br> journée mondial pour les enfants </a>	
        <a href=sport.html target=self> <img src=pho/1.gif border=5 height=50% width=50% > </img></a>
     </td>
    </tr>
    </table>
    </html>
    j'ai essayer pour : http://www.google.com il affiche que quelques balises ?? a ce que le probleme est au niveau de mon code ??
    voila mon code :
    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
    void MainWindow::lire()
    {
       int i=0;
     
       QDomElement e;
       QDomNode n;
       QWebFrame *mainFrame = centralWidget->webView->page()->mainFrame();
       QString frameText = mainFrame->toHtml();
       centralWidget->plainTextEdit->setPlainText(frameText);
       QDomDocument doc;
       doc.setContent(frameText);
       QDomElement racine = doc.documentElement();            
       QDomNode noeud = racine.firstChild();  
     while (!noeud.isNull()) {         
             if (noeud.isElement()) {
                     e = noeud.toElement();
     
                     Arbre_DOM(noeud,e);  
                                    }
            	 noeud = noeud.nextSibling();
     
                            }       
    }
     
    void MainWindow::Arbre_DOM(QDomNode node, QDomElement element) 
    {
     int i=0;
       QDomNodeList listnode;  
       QDomNode n;
       QDomElement eaff; 
       m_node = node; 
       m_element = element;               
                        listnode = m_element.childNodes();  
     
                           for(i=0; i<listnode.length() ; i++) {
     
             				             n = listnode.item(i);
                  					     eaff = n.toElement(); 
               					    qDebug() << "le fils de la balise  " <<element.tagName()<< "est : "<<eaff.tagName();
                                                         if  (listnode.item(i).hasChildNodes ()) {  Arbre_DOM(listnode.item(i),eaff); }
          			                                    }   
     
    }
    merci pour tout aide ;;;

  7. #7
    Membre confirmé Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Bonjour.
    merci d'utiliser les balise (le # quand tu ecrit un message)

    as tu créé ton arbre par un parcours récursif des noeuds?
    salut,,
    j'ai fait un parcours recursif mais il se bloque lorsque je charge des pages web comme (google , hotmail ..ect) , j'ai pas arrivai encore a voir le prbleme de mon code,
    vous pouvez m'aider j'ai envoyé mon code ???
    merci pour tout aide,

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    salut
    Comment cela il se bloque?

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Tu appel ta fonction lire quand?? aprés chargement de la page ou tu ne sait pas?

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut

    j'ai essayé. J'ai pas réussi non plus

  11. #11
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Y'aurait moyen d'avoir une micro archive de test svp? (la flegme de m'y mettre de zéro )

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    en parcourant les DomElement. J'avais aussi essayé en parcourant les DomNode, pas mieux...
    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
    #include <QtGui>
    #include <QtWebkit>
    #include <QtXml>
    class myObject : public QObject
    {
    Q_OBJECT
    public :
    myObject()
    {
    	connect(&page,SIGNAL(loadFinished ( bool) ), this,SLOT(finChargement()));
    }
    void load(QString s)
    {
    	page.mainFrame()->load(s);
    }
    QWebPage page;
    public slots :
     
    void ParcoureArbre_DOM( QDomElement element,int level) 
    {
     
       QDomNodeList listnode = element.childNodes(); 
       {
    	   QString s;
    	   QTextStream stream(&s);
    	   for (int i=0;i<level;++i) stream<<"  ";
    	   stream<<element.tagName();
    	   qDebug() << s ;        
       }
        for(int i=0; i<listnode.length() ; ++i) 
    	{       
    		if (listnode.item(i).isElement())
    			ParcoureArbre_DOM(listnode.item(i).toElement(),level+1); 
    	} 
    }
     
    void finChargement()
    {
       QString frameText = page.mainFrame()->toHtml();
       QDomDocument doc;
       doc.setContent(frameText);
       ParcoureArbre_DOM(doc.documentElement() ,0); 
    }
     
    };
    #include "main.moc"
    int main(int argc, char** argv)
    {
    QApplication app(argc,argv);
    myObject obj;
    obj.load("http://www.google.com");
     
    return app.exec();
     
    }

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    http://validator.w3.org/check?uri=ht...e&ss=1&group=0

    la page ne serait pas un xml valide... ??

  14. #14
    Membre confirmé Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    en parcourant les DomElement. J'avais aussi essayé en parcourant les DomNode, pas mieux...
    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
    #include <QtGui>
    #include <QtWebkit>
    #include <QtXml>
    class myObject : public QObject
    {
    Q_OBJECT
    public :
    myObject()
    {
    	connect(&page,SIGNAL(loadFinished ( bool) ), this,SLOT(finChargement()));
    }
    void load(QString s)
    {
    	page.mainFrame()->load(s);
    }
    QWebPage page;
    public slots :
     
    void ParcoureArbre_DOM( QDomElement element,int level) 
    {
     
       QDomNodeList listnode = element.childNodes(); 
       {
    	   QString s;
    	   QTextStream stream(&s);
    	   for (int i=0;i<level;++i) stream<<"  ";
    	   stream<<element.tagName();
    	   qDebug() << s ;        
       }
        for(int i=0; i<listnode.length() ; ++i) 
    	{       
    		if (listnode.item(i).isElement())
    			ParcoureArbre_DOM(listnode.item(i).toElement(),level+1); 
    	} 
    }
     
    void finChargement()
    {
       QString frameText = page.mainFrame()->toHtml();
       QDomDocument doc;
       doc.setContent(frameText);
       ParcoureArbre_DOM(doc.documentElement() ,0); 
    }
     
    };
    #include "main.moc"
    int main(int argc, char** argv)
    {
    QApplication app(argc,argv);
    myObject obj;
    obj.load("http://www.google.com");
     
    return app.exec();
     
    }
    merci pour vos reponses,
    je fait l'appel de lire() apres le chargement de la page ,
    il se bloque c'est a dire que il ne donne pas toutes l'arbre Dom de la page HTML,
    merci pour ton code je l'ai essayer il ma donner le meme resultat que le mien :
    "html"
    " head"
    " meta"
    " title"
    " style"
    " script"
    hors si on vois le code HTML de google il contient encore plusieurs balises a l'interieure de <body> qui est apres la balise </script>comme <div> <a> <img> .. ect... c'est pour ca j'ai dit que il se bloque ,,
    j'ai pas compri pour quoi il s'arrete l'appel ???

    merci pour tout aide ,,

  15. #15
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    On en est au même point...
    http://www.chez.com/xml/htmlt/cloner.htm

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035

  17. #17
    Membre confirmé Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    On en est au même point...
    http://www.chez.com/xml/htmlt/cloner.htm
    merci pour le lien ,,
    donc il faut transformer la page HTML to XML avant de construire l'arbre DOM ,,
    c'est ca si j'ai bien compri???
    merci pour tout aide

  18. #18
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par GoldenEyes Voir le message
    merci pour le lien ,,
    donc il faut transformer la page HTML to XML avant de construire l'arbre DOM ,,
    c'est ca si j'ai bien compri???
    merci pour tout aide
    apparemment oui.

  19. #19
    Membre confirmé Avatar de GoldenEyes
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    merci pour le lien ,,
    j'ai pas arriver a compiler je travail sous linux (ubuntu )??
    vous pouvez m'aider
    merci pour tout aide ,,

  20. #20
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    J'ai tout compris mais il semble su'il utilise du java...
    A mon avis le plus simple est d'utiliser HTML Tidy

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Comment afficher l'arbre du DOM d'une page HTML ?
    Par Beginner. dans le forum Débuter
    Réponses: 1
    Dernier message: 18/05/2015, 00h17
  2. Comment afficher l'arbre du Dom d'une page html ?
    Par Beginner. dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2015, 00h08
  3. xml et xsl dans une page html
    Par luchoo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 23/12/2011, 09h25
  4. [DOM] Bufferiser une page html en javascript
    Par zbouby_51 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 27/03/2008, 11h34
  5. Afficher un document XML en mémoire dans une page HTML
    Par anthonyd dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 12/09/2007, 12h00

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