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

Langage PHP Discussion :

Un tableau désespérément vide


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut Un tableau désespérément vide
    Bonjour à tous,

    Afin de générer un fichier Excel de statique, j'ai besoin de construire un tableau à partir de données scraper via DOMXPath, mon code me renvoi un tableau désespéramment vide.

    Une idée ou un conseil ?

    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
    <?php
    error_reporting(E_ERROR | E_PARSE);
     
    $doc = new DOMDocument;
    $doc->loadHtmlFile('http://www.actronics.eu/fr/shop/vw-transporter-t5-7h-7e-7j-2003-ecu-fr');
     
    $xpath = new DOMXPath($doc);
     
    // élèments à traiter
    $nodelist = $xpath->query("//*[@id='main']/ul/li");
     
    $items = array();
     
    // boucle
    $nb = $nodelist->length;
    for($pos=0; $pos<$nb; $pos++)  {
     
    	// tableau des données
    	$items[] = [
    		'EcuType' => $xpath->query('@h2', $nodelist[$pos])->item(0)->textContent,
    		'PartNumber'  => $xpath->query(".//*[@id='tab-part_numbers']/table/tbody/tr/td[1]", $nodelist[$pos])->item(0)->textContent,
    		'InfoDiag' => $xpath->query(".//*[@id='tab-diagnostic_information']/table/tbody/tr/td[1]", $nodelist[$pos])->item(0)->textContent
    	];
    }
     
    echo '<pre>', print_r($items), '</pre>';
    ?>
    Merci de votre aide.

    Cdlt
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Tes requêtes XPath sont fausses:
    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
    libxml_use_internal_errors(true);
     
    $doc = new DOMDocument;
    $doc->loadHTMLFile('actronics.html');
     
    $xpath = new DOMXPath($doc);
     
    $nodelist = $xpath->query("//*[@id='main']/ul/li");
     
    $items = [];
     
    /* on utilise foreach et pas une boucle for */
    foreach($nodelist as $node) {
        $items[] = [
            /* h2 est une balise pas un attribut */
            'EcuType' => $xpath->query('.//h2', $node)->item(0)->textContent,
            /* l'élément tbody n'est pas automatiquement ajouté dans l'arbre DOM */
            'PartNumber' => $xpath->query('.//*[@id="tab-part_numbers"]/table/tr/td[1]', $node)->item(0)->textContent,
            'InfoDiag' => $xpath->query('.//*[@id="tab-diagnostic_information"]/table/tr/td[1]', $node)->item(0)->textContent
        ];
    }
     
    libxml_clear_errors();
     
    echo '<pre>', print_r($items, true), '</pre>';
    Les requêtes XPath peuvent grandement être améliorées pour accélérer la recherche (en étant plus précis).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Merci CosmoKnacki, j'ai compris mon erreur.

    Je vais continuer à consulter la doc pour améliorer le code comme tu me le conseille.
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  4. #4
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    J'ai un petit souci au niveau du formatage des données.

    J'aimerais que les données (PartNumber et InfoDiag) soit séparer par une virgule, ex: (aaa, bbb, ccc).

    Je n'arrive pas à le faire directement dans la requête xpath, je googlelise sans vraiment trouver.

    Merci
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Je ne vois vraiment pas ce qui te pose problème, c'est très simple à résoudre avec XPath. Par exemple pour InfoDiag, le code HTML est:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <div class="panel entry-content" id="tab-diagnostic_information">
        <table width="99%" border="0" cellpadding="0">
            <tr>
                <td>
                    <div class="area-in-tab">
                        <div class="sub-container-inner">
                            <ul><li>Véhicule ne démarre pas</li><li>Pas de communication</li><li>Injecteur défectueux</li></ul>
                        </div>
                    </div>
                </td>
                ...
    Bon bah au lieu de cibler le nœud td et d'extraire son attribut textContent (ce qui fait que tu obtiens agglutiné: Véhicule ne démarre pasPas de communicationInjecteur défectueux), il suffit de prolonger le path pour viser les nœuds li, puis d'extraire pour chacun les contenus texte. Libre à toi ensuite de les joindre comme tu le veux.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    J'ai compris CosmoKnacki

    C'est vrai que c'est simple en faite.

    Merci encore pour les explications, c'est cool.
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/01/2008, 08h22
  2. Savoir quand une variable ou un tableau est vide
    Par cryptorchild dans le forum Langage
    Réponses: 1
    Dernier message: 17/02/2006, 08h40
  3. [Tableaux] Tableau valeur vide pour une clé
    Par hisy dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2006, 11h49
  4. Comment détecter si un tableau est vide ?
    Par ErPi dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 18h50
  5. [langage] tableau @ à vide
    Par pascal.cargouet dans le forum Langage
    Réponses: 2
    Dernier message: 18/10/2004, 12h38

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