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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Parser uniquement une partie d'un tableau


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 45
    Par défaut [SimpleXML] Parser uniquement une partie d'un tableau
    Bonjour @ tous,

    Je souhaiterais "parser" une partie d'un tableau présent à l'adresse suivante : http://grenoble.stats.pointstreak.co...standings.html
    J'utilise PHP Simple HTML DOM Parser.

    Je débute dans ce domaine du "parser", et je n'ai réussi qu'à faire un simple "echo" du tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $html = file_get_html('http://grenoble.stats.pointstreak.com/templatepreview/standings.html');
    foreach($html->find('.tablelines') as $classement);
    	echo $classement;
    ?>
    Je souhaiterais "parser" uniquement les colonnes "RG", "Equipe", "MJ" et "Points". C'est à dire que les autres colonnes seront invisibles.

    Pourriez vous s'il vous plait m'indiquer la démarche à suivre afin d'isoler uniquement ces colonnes.

    Merci d'avance !

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Je ne vois pas la nécessité de se mettre à travailler avec encore d'une bibliothèque PHP Simple HTML DOM Parser de plus. On peut simplement utiliser DOMDocument et SimpleXML (naviguer entre les deux pour en profiter les facilités plus soustenues ...)

    Voici une demo de concept profitant la structure spécifique de la page en question. Si on veut quelques choses de plus générales, il y a de quoi à regarder et de temps à investir.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $surl="http://grenoble.stats.pointstreak.com/templatepreview/standings.html";
    $doc=new DOMDocument();
    $bret=$doc->loadHtmlFile($surl);
    if (!$bret) {
        echo 'Erreurs rencontrées en parsant le document, impossible de continuer ...', "\n";
        exit;
    }
    $simplexml=simplexml_import_dom($doc);
    $result=$simplexml->xpath("//table[@class='tablelines']/tr[position() > 1]/td[position()=1 or position()=2 or position()=3 or position()=9]");
    $n=1;
    while(list( , $node) = each($result)) {
        echo trim(dom_import_simplexml($node)->textContent), ($n % 4 == 0 ? "\n" : ',');
        $n++;
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 45
    Par défaut
    Merci tsuji.

    Je ne savais pas qu'il était possible de se passer de bibliothèque supplémentaire. Je viens de tester ton code, et ça fonctionne, mais j’obtiens un ligne de données et non un tableau.

    Est-ce normal ? Ai-je manqué quelque chose ? Si non, pourrais-tu me guider afin de transformer ces données en tableau ?

    Merci d'avance.

    PS :
    J'ai modifié un peu ton code pour qu'il pointe vers les "Pts" et non les "% d'arrêts" sur cette ligne (j'ai passé la dernière position de 9 à 8) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result=$simplexml->xpath("//table[@class='tablelines']/tr[position() > 1]/td[position()=1 or position()=2 or position()=3 or position()=8]");

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Si vous voulez retourner comme un tableau au sens html, c'est fait peut-on-dire comme d'habitude une fois les données étant en main ... (mais php n'est pas forcément au service de html, bien entendu).

    Pour ne rendrement html, on peut le faire comme ça et vous ajoutez les stylistiques comme vous voulez dessus.
    Code php : 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
    $doc=new DOMDocument();
    $bret=$doc->loadHtmlFile($surl);
    if (!$bret) {
        echo '<div>Error while parsing the document</div>';
        exit;
    }
    $simplexml=simplexml_import_dom($doc);
    $result=$simplexml->xpath("//table[@class='tablelines']/tr/td[position()=1 or position()=2 or position()=3 or position()=8]");
     
    $n=1;
    echo '<table border="1">';
    while(list( , $node) = each($result)) {
        echo ($n % 4 == 1 ? '<tr>' : '');
        echo '<td>', trim(dom_import_simplexml($node)->textContent), '</td>', ($n % 4 == 0 ? '</tr>' : '');
        $n++;
    }
    echo '</table>';

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 45
    Par défaut
    Tsuji, merci une nouvelle fois pour ton aide.

    Je reviens vers toi, pour savoir s'il est possible de mettre en gars dynamiquement une données du tableau.

    Par exemple, Rouen est classé 9ème dans le tableau, je souhaiterais le mettre en gras et que cette mise en forme soit conservée même si la position dans le tableau change.

    Est-ce possible avec SimpleXML ?

  6. #6
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Si on veut ajouter un style très localizé, on peut ajouter un style "inline". Si il y a beaucoup de cas, ça risque d'être ennuyeux. Pour le cas de Rouen, c'est fait comme ça.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while(list( , $node) = each($result)) {
        $data=trim(dom_import_simplexml($node)->textContent);
        echo ($n % 4 == 1 ? '<tr>' : '');
        if ($data=='Rouen') {
            echo '<td style="font-weight:bold;">', $data, '</td>', ($n % 4 == 0 ? '</tr>' : '');
        } else {
            echo '<td>', $data, '</td>', ($n % 4 == 0 ? '</tr>' : '');
        }
        $n++;
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/09/2007, 18h54
  2. Scrollbar sur une partie d'un tableau
    Par Dams59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/04/2007, 09h40
  3. [HTML] Rafraichir uniquement une partie d'un page html
    Par andlio dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/03/2006, 15h40
  4. [Tableau] récupérer une partie d'un tableau
    Par keyra dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 07/02/2006, 22h17
  5. passer une partie d'un tableau en paramettre.
    Par monstroplante dans le forum Langage
    Réponses: 13
    Dernier message: 04/11/2005, 01h22

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