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 :

[DOM] Informations sur l'affichage des informations récupérer via Xpath Query


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut [DOM] Informations sur l'affichage des informations récupérer via Xpath Query
    Bonjour,

    Suite de ce précédent topic.

    J'ai réussi à extraire mes données via une requête Xpath. J'aimerais maintenant les manipuler. J'aimerais savoir si il était possible de récupérer la valeur et le code HTML contenu dans le "nodeValue" ?


    Voici le 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
     
    <?php
    $url='    <h2 class="title_lowercase">MATERIEL 1</h2>
        <h2>Général</h2>
        
        <div class="carac">
        	<table class="description">
                <tr>
                    <td>Info 1</td>
                    <td class="td-desc">
    					<ol>
    						<li>Valeur 1</li>
    						<li>Valeur 2</li>
    					</ol>
    				</td>
                </tr>
                <tr>
                    <td>Info 2</td>
                    <td class="td-desc">Valeur 2</td>
                </tr>
        	</table>
        </div>
    ';
     
     
    	$dom = new DOMDocument();
    	@$dom->loadHTMLFile($url);
    	$xpath = new DOMXPath($dom);
     
    	$caracteristiques = array(); // info => valeur
    	$caracteristiques_entries = $xpath->query('//table[@class="description" and position() = 1]/tr');
     
    	// //h3/following-sibling::node[1]/tr 
     
    	foreach($caracteristiques_entries as $entry){
    		$caracteristiques[$entry->childNodes->item(0)->nodeValue] = $entry->childNodes->item(2)->nodeValue;
    	}
     
    	echo '<pre>';
    	print_r($caracteristiques);
    	echo '</pre>';
    Ce code m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        [Info 1] => 
    					Valeur 1
    						Valeur 2
     
        [Info 2] => Valeur 2
    Mais sans le code HTML, donc je n'ai pas la possibilité de séparer les deux valeurs.
    Sachant que je ne sais pas par avance si la valeur contient du code HTML !

    Je trouve très peu d'information sur la facon de lire le résultat d'une requête Xpath. Auriez vous des infos la dessus ? J'arrive à deviner le fonctionnement de cette ligne, mais sans plus.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    loadHTML et pas loadHTMLFile

    pourquoi ne pas rester dans le même sujet ?
    http://www.developpez.net/forums/d10...tion-attribut/

    le html il est visiblement la, c'est juste qu'il est interprété par ton navigateur regarde la source

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Space Cowboy, tu as dû loupé quelque-chose en PHP, dans l'exemple que tu montres, je t'ai montré comment récupérer le contenu de ton tableau HTML sous la forme d'une tableau PHP.

    Tu peux très bien réafficher ce résultat sous une autre forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach($caracteristiques as $nom => $carac){
        echo $nom . ' : ' . $carac . '<br/>';
    }
    Si ton but est d'afficher directement le HTML du tableau, pas besoin de parcourir les lignes de ton tableau via XPath, tu peux directement récupérer le HTML.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $caracteristiques_table = $xpath->query('//table[@class="description" and position() = 1]');
    $caracteristiques_table_html = $dom->saveXML($caracteristiques_table->item(0));

  4. #4
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    loadHTML et pas loadHTMLFile

    pourquoi ne pas rester dans le même sujet ?
    http://www.developpez.net/forums/d10...tion-attribut/

    le html il est visiblement la, c'est juste qu'il est interprété par ton navigateur regarde la source

    Le seul moyen de différencier les deux valeurs lorsqu'elle sont dans un ul/li c'est de garder le code HTML dans le tableau PHP.
    Je ne pense pas que le code soit interprété par le navigateur, il n'est pas présent dans le code source.








    Citation Envoyé par ThomasR Voir le message
    Space Cowboy, tu as dû loupé quelque-chose en PHP, dans l'exemple que tu montres, je t'ai montré comment récupérer le contenu de ton tableau HTML sous la forme d'une tableau PHP.

    Tu peux très bien réafficher ce résultat sous une autre forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach($caracteristiques as $nom => $carac){
        echo $nom . ' : ' . $carac . '<br/>';
    }
    J'avais vu, c'est les "childNodes" et "nodeValue" que je n'ai pas saisi.
    Mais le code HTML de la balise /tr n'est pas dedans.








    loadHTML au lieu de loadHTMLFile ne renvois rien.
    Actuellement, je fais mes tests sur un fichier .html présent dans le même répertoire.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Space Cowboy Voir le message
    loadHTML au lieu de loadHTMLFile ne renvois rien.
    Actuellement, je fais mes tests sur un fichier .html présent dans le même répertoire.
    c'etait dans ton exemple que c'était pas bon
    si je comprend bien tu veux récupérer le innerHTML ?

  6. #6
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    c'etait dans ton exemple que c'était pas bon
    si je comprend bien tu veux récupérer le innerHTML ?
    C'est ca.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Space Cowboy Voir le message
    C'est ca.
    y'a pas de fonction pour créer ca directement, mais y'a des astuces pour le faire
    http://www.php.net/manual/en/book.dom.php#89718

  8. #8
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	foreach($caracteristiques_entries as $entry)
    	{
    		$A=$entry->childNodes->item(0)->nodeValue;
    		$B=$entry->childNodes->item(2)->nodeValue;
    		$B=str_replace('<br />','\n', $B);
    		echo $A.' - '.$B.'<br />';
     
     
     
    	}
    Ca ne fonctionne pas.

    Le problème viens du code renvoyé par $xpath->query Apparament ca supprime completement les balises HTML :/
    Ca expliquerais pourquoi je ne récupére pas les images qui sont présente dans la balise /td

  9. #9
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    En fait ca ne supprime pas le HTML c'est nodeValue qui ne renvoie que la valeur du noeud texte.

    Il faut utiliser la méthode saveXML de l'objet DomDocument et lui passer en paramètre le noeud à extraire, le fonction retourne alors une chaine de caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach($caracteristiques_entries as $entry)
    {
        $title = $dom->saveXML($entry->childNodes->item(0));
        $body = $dom->saveXML($entry->childNodes->item(2));
     
        echo $title . ' - ' . $body . '<br />'; 
    }
    http://www.gibdon.com/2010/06/php-do...t-and-xml.html

  10. #10
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Bonjour,

    En fait ca ne supprime pas le HTML c'est nodeValue qui ne renvoie que la valeur du noeud texte.

    Il faut utiliser la méthode saveXML de l'objet DomDocument et lui passer en paramètre le noeud à extraire, le fonction retourne alors une chaine de caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach($caracteristiques_entries as $entry)
    {
        $title = $dom->saveXML($entry->childNodes->item(0));
        $body = $dom->saveXML($entry->childNodes->item(2));
     
        echo $title . ' - ' . $body . '<br />'; 
    }
    http://www.gibdon.com/2010/06/php-do...t-and-xml.html
    Ca fonctionne ! j'ai quelque soucis de caractère spéciaux ( ) qui viennent mais rien de dramatique.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/03/2010, 10h20
  2. Réponses: 9
    Dernier message: 19/06/2008, 12h19
  3. Récupérer des Informations sur un PC via un Réseau ?
    Par MaTHieU_ dans le forum Administration
    Réponses: 6
    Dernier message: 22/11/2005, 12h39
  4. Réponses: 6
    Dernier message: 28/09/2003, 17h49

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