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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

+ Répondre à la discussion
Cette discussion est résolue.

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