Parser un tableau html
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

Parser un tableau html



  1. #1
    invitea1400dd5

    Parser un tableau html


    ------

    Bonsoir à tous,

    J'aimerai "parcer" un tableau html ... je m'explique :
    En sachant qu'un tableau html est construit de la façon suivante par exemple :
    Code:
    <table width="300" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td>Bonjour</td>
        <td>Hello</td>
        <td>Benas</td>
        <td>Hi</td>
        <td>Coucou</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
    </table>
    Programmation en php :

    Je voudrai récupérer sous une forme :
    Tant qu'il y a des lignes dans le tableau (en compter les <tr>)
    Lecture du 1er <tr>
    enregistrer dans la variable $colonne1 le contenu du 1er <td></td>
    enregistrer dans la variable $colonne2 le contenu du 2eme <td></td>
    enregistrer dans la variable $colonne3 le contenu du 3eme <td></td>
    ...
    Puis on passe au <tr> suivant
    enregistrer dans la variable $colonne1 le contenu du 1er <td></td>
    enregistrer dans la variable $colonne2 le contenu du 2eme <td></td>
    enregistrer dans la variable $colonne3 le contenu du 3eme <td></td>
    ...
    et ainsi de suite ...

    Fin du tant que.


    C'est un peu le même fonctionnement qu'un lecteur de fichier xml mais en changeant les <items> par les <tr> et les <objets> par des <td>

    Si certains on compris le principe de mon histoire, et si vous avez des idées à me proposer, je suis preneur.

    Merci d'avance de vos propositions ...

    Pascal

    -----

  2. #2
    invitea0ecda6e

    Re : Parcer un tableau html

    Et quel est ton problème ?
    Tu sembles avoir déjà fait l'algorithme.

  3. #3
    invitea1400dd5

    Re : Parcer un tableau html

    Le problème c'est comment faire la boucle sur les <td> ?
    L'algorithme écris en plus ou moins en français ça va, dès que l'on passe en fonction php ... c'est plus la même histoire ...

  4. #4
    invitea0ecda6e

    Re : Parcer un tableau html

    preg-split sur les "<tr>" puis les "<td>" ?

  5. A voir en vidéo sur Futura
  6. #5
    invitea1400dd5

    Re : Parcer un tableau html

    Aussitôt demandé, aussitôt répondu !
    Impressionnant !!!
    Encore une fois merci Tlaloc !
    Je teste demain, il commence a faire tard se soir ...

  7. #6
    invitea0ecda6e

    Re : Parcer un tableau html

    Encore mieux: un Parseur HTML !

  8. #7
    invitea1400dd5

    Re : Parser un tableau html

    Le coup du encore mieux ... j'ai pas tout compris à la programmation ... dsl.

    Voila ce que je viens de faire :
    Mais forcement ça ne fonctionne pas, ça reste bloqué sur le premier <tr> ... ???

    Si tu as un peu de temps pour voir l'erreur ...
    Merci d'avance,

    pascal

    Code:
    $htmlbits = preg_split('/(<tr>|<\/tr>)/i', $fichier, -1, PREG_SPLIT_DELIM_CAPTURE); 
    //print_r($htmlbits);
    
    foreach ($htmlbits as $tr)
    	{	
    		$htmlbits2 = preg_split('/(<td>|<\/td>)/i', $tr, -1, PREG_SPLIT_DELIM_CAPTURE); 
    		
    		foreach ($htmlbits2 as $td)
    			{
    				echo $htmlbits2["2"];
    				echo '<br />';
    				echo $htmlbits2["6"];
    				echo '<br />';
    				echo $htmlbits2["14"];
    				echo '<br />';
    				echo $htmlbits2["18"];
    				echo '<br />';
    				echo $htmlbits2["22"];
    				
    				
    				echo '<br /><br /><br /><br />';
    				
    				
    				echo $td["2"];
    				echo '<br />';
    				echo $td["6"];
    				echo '<br />';
    				echo $td["14"];
    				echo '<br />';
    				echo $td["18"];
    				echo '<br />';
    				echo $td["22"];
    			}
    	}
    Dernière modification par JPL ; 06/09/2011 à 14h47. Motif: correction du titre

  9. #8
    invitea0ecda6e

    Re : Parser un tableau html

    squal31, as-tu avancé là dessus, je n'ai pas eu le temps de regarder.
    A priori (sans tester), je pense que le "PREG_SPLIT_DELIM_CAPTURE" ne sert ici à rien. et que tu peux remplacer les $htmlbits2["x"] par $htmlbits2[x]. Pourquoi des " d'ailleurs ?

  10. #9
    invitea1400dd5

    Re : Parser un tableau html

    Salut Taloc, non effectivement j'ai pas du tout avancé sur ce code ...
    Pour " j'ai simplement suivie un morceau de code que j'ai trouvé sur le net.

    Si tu as des idées supplémentaires, je suis grandement preneur ... tu te doutes bien ...

    Bientot le Wend !

  11. #10
    Dlzlogic

    Re : Parser un tableau html

    Bonjour,
    Quand j'ai à faire un truc de ce genre, je commence par faire un truc simple et surtout qui marche.
    Quelque-chose du genre
    Code:
    Boucle infinie
      lecture d'une ligne
        recherche d'un <tr>
        {
          recherche d'un <td>
            recherche d'un <?td>
              lecture
        }
        recherche d'un </tr>
    fin de boucle
    Dans le fichier HTML, il peut y avoir des CRLF ou pas, les tr, td peuvent être en majuscule ou pas,
    c'est à dire qu'il y a un tas de pièges potentiels.
    A mon avis les fonction du type split ne sont à utiliser que quand on sait exactement les séparateurs qu'on va rencontrer.
    Dans le cas présent, il y 2 séparateurs de début et 2 séparateurs de fin, ça fait beaucoup pour une seule fonction à mon avis.
    Par ailleurs, que se passera-t-il si il manque un </td>, ce qui est autorisé.

  12. #11
    Dlzlogic

    Re : Parser un tableau html

    Dans mon message précédent j'ai oublié de préciser que HTML c'est d'abord du XML, alors il me semblerai plus logique de raisonner à partir du XML, le HTML ne sera qu'une application.

  13. #12
    inviteb9b3d9ee

    Re : Parser un tableau html

    A mon avis avec pre_split ca va etre bien lourd à developper.

    Simple HTML pourquoi pas, mais tu as surtout le Simple XML (http://php.net/manual/fr/book.simplexml.php) en utlisant des XPath. Ce sera le plus rapide et le moins gourmand en mémoire et ressources.

    Sinon il aussi le DOM Document de PHP (http://php.net/manual/fr/class.domdocument.php) qui un peu plus puissant et pratique pour parser, mais qui est plus lourd en ressources, et plus lent.

    Perso j'utiliserais ici Simple XML

  14. #13
    invitea1400dd5

    Re : Parser un tableau html

    Bonsoir, et merci à tous de votre aide.
    Je vais faire mon têtu, cad que je vais rester sur ma position de ma 1ere idée ...

    J'explique : J'ai un tableau de ce style : (exactement de ce style ! les <tr> et <td> reste tel quel et ne sont pas un coup en minuscule, un coup en majuscule ou autre truc du style ...)
    Code:
    $fichier2 = '
    <table width="300" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td>Bonjour0</td>
        <td>Hello0</td>
        <td>Benas0</td>
        <td>Hi0</td>
        <td>Coucou0</td>
      </tr>
      <tr>
        <td>Bonjour1</td>
        <td>Hello1</td>
        <td>Benas1</td>
        <td>Hi1</td>
        <td>Coucou1</td>
      </tr>
      <tr>
        <td>Bonjour2</td>
        <td>Hello2</td>
        <td>Benas2</td>
        <td>Hi2</td>
        <td>Coucou2</td>
      </tr>
      <tr>
        <td>Bonjour3</td>
        <td>Hello3</td>
        <td>Benas3</td>
        <td>Hi3</td>
        <td>Coucou3</td>
      </tr>
    </table>
    ';
    Voila ce que j'ai réalisé :
    Code:
    $tr = explode("<tr>", $fichier2);
    print_r($tr);
    Du coup voila ce que j'obtiens :
    Code:
    Array
    (
        [0] => 
    <table width="300" border="0" cellspacing="0" cellpadding="0">
      
        [1] => 
        <td>Bonjour0</td>
        <td>Hello0</td>
        <td>Benas0</td>
        <td>Hi0</td>
        <td>Coucou0</td>
      </tr>
      
        [2] => 
        <td>Bonjour1</td>
        <td>Hello1</td>
        <td>Benas1</td>
        <td>Hi1</td>
        <td>Coucou1</td>
      </tr>
      
        [3] => 
        <td>Bonjour2</td>
        <td>Hello2</td>
        <td>Benas2</td>
        <td>Hi2</td>
        <td>Coucou2</td>
      </tr>
      
        [4] => 
        <td>Bonjour3</td>
        <td>Hello3</td>
        <td>Benas3</td>
        <td>Hi3</td>
        <td>Coucou3</td>
      </tr>
    </table>
    
    )
    Et voici du coup mes questions, ... lol

    Comment avec ça rentrer dans une boucle pour refaire pareil avec les <td> ?

    Sachant que mon but final est d'extraire ce qui est entre chaque <td> xxx </td>
    Et l'enregistrer dans une variable du style :
    $td0 = Bonjour3;
    $td1 = Hello3;
    $td2 = Benas3;
    $td3 = Hi3;
    $td4 = Coucou3;

    Merci d'avance de votre aide, ...
    pascal

  15. #14
    Dlzlogic

    Re : Parser un tableau html

    Bonsoir,
    Que voulez-vous qu'on vous dise ?
    Le HTML est une application de XML.
    Personnellement que n'ai jamais utilisé split, explode etc que pour des objets que j'ai fabriqués moi-même, c'est la seule façon d'être sûr que ce genre de truc marchera toujours.
    Il est vrai que je préfère dans tous les cas utiliser les outils de plus bas niveau possible, moyennant quoi, j'ai des programmes qui marchent, sont légers, rapides et performants. Autre avantage que j'écrive en C/C++ ou en PHP, les sources sont pratiquement les mêmes.

  16. #15
    invitea0ecda6e

    Re : Parser un tableau html

    Pourquoi est ce que tu ne refais pas la même chose ?
    Donc parcourir ton array $tr et sur chaque entrée:
    Code:
    $td = explode("<td>", $tri);

  17. #16
    invitea1400dd5

    Re : Parser un tableau html

    Merci a vous 2,
    Je viens juste de réussir ! Ouf ...

  18. #17
    invitea1400dd5

    Re : Parser un tableau html

    Voila en gros ma solution ... simple et qui fonctionne ...

    Code:
    $tr = preg_split("/<\/?"."tr".">/",$fichier);	
    
    foreach($tr as $element)
    	{	
    		// decoupage de la chaine par td
    		$td = preg_split("/<\/?"."td".">/",$element);
    
                    foreach($td as $element2)
    			{
    				//echo ''.$element2.' <br />';
    		 	}
            }

  19. #18
    invitea0ecda6e

    Re : Parser un tableau html

    Et la solution était ? Pour ceux qui auraient le même problème par la suite...

    EDIT: oups, messages croisés, super squal31

  20. #19
    invitea1400dd5

    Re : Parser un tableau html

    Je m'applaudi moi même ...

  21. #20
    inviteb9b3d9ee

    Re : Parser un tableau html

    Bon je le repète, mais parser un tableau, ou du code XML ou HTML avec explode, ou preg_split est une hérésie !

    Il y a des fonctions deja pretes dans PHP pour faire ca !

    Si tu veux le contenu de tous des TD tu juste a faire ca :
    Code:
    <?php
    
    	$CodeHTML =  '<table><tr><td>Col 1</td><td>Col 2</td><td>Col 3</td><td>Col 4</td><td>Col 5</td><td>Col 6</td><td>Col 7</td></tr></table>' ;
    
    	$xmlDoc = new DOMDocument();
    	$xmlDoc->loadXML($CodeHTML);
    	
    	$NodesTD = $xmlDoc -> getElementsByTagName("td") ;
    
    	for($c = 0; $c<$NodesTD->length; $c++){
    		$text[$c] =$xmlDoc->saveXML($NodesTD->item($c));
    		echo "> " . $text[$c] . "<br>";
    	} 
    
     ?>
    Propre, clair, simple en 3 min de codage

  22. #21
    inviteb9b3d9ee

    Re : Parser un tableau html

    Juste un complément : pour ceux qui veulent parser du code HTML et qui tombent sur cette page :

    N'utiliser pas de explode ou preg_split !

    http://php.net/manual/fr/function.preg-split.php
    Si vous n'avez pas besoin de la puissance des expressions régulières, vous pouvez choisir des alternatives plus rapides (quoique plus simples) comme explode() ou str_split().
    Les expressions régulières sont parmi les fonctions les plus lentes et gourmandes en ressources. Si vous parser 10Ko de code ca ira. Mais plus les pages à parser seront grosses et plus votre serveur va ramer, c'est un bon moyen de le planter régulièrement : je parle par expérience.

Discussions similaires

  1. Comment ecrire un parser (syntaxique) en C ?
    Par invitef6b3c3d3 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 09/09/2011, 11h14
  2. [HTML] Problème de tableau !
    Par invite2ed2e5e9 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 08/12/2009, 17h38
  3. Parser 'proprement' en C
    Par invite49051c46 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 09/10/2008, 18h17
  4. question sur le HTML - appel de pages dans un tableau
    Par invite8e6b42f1 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 52
    Dernier message: 24/01/2004, 21h39