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 XML] Lecture contenu xml


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Points : 39
    Points
    39
    Par défaut [DOM XML] Lecture contenu xml
    Bonjour,
    je suis actuellement en train de lire un fichier xml et de le mettre dans une page en php.

    un bout de mon xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <CRITERES>
    <Crit CLEF_CRITERE="121212" CLEF_MODA="4000014"/>
    <Crit CLEF_CRITERE="79785464" CLEF_MODA="102"/>
    <Crit CLEF_CRITERE="7895646" CLEF_MODA="0">http://www.monsite.fr/photos/imgsdsd.jpg</Crit>
    <Crit CLEF_CRITERE="756456" CLEF_MODA="0">PAS UNE IMAGE</Crit>
    <Crit CLEF_CRITERE="78965656" CLEF_MODA="1"/>
    <Crit CLEF_CRITERE="785546" CLEF_MODA="1"/>
    <Crit CLEF_CRITERE="4568755" CLEF_MODA="2"/>
    <Crit CLEF_CRITERE="648765" CLEF_MODA="16"/>
    </CRITERES>
    Pour récupérer les valeurs je fais par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	$img = $item->getElementsByTagName('CRITERES');
    	$img = $img->item(0)->nodeValue;
    	if ($img != '') 
    	{
            echo ' <img src="'.$img.'" width="100" class="gauchebrd"><br/>';
        }
    le problème est que au lieu d'avoir un image qui s'affiche j'ai un erreur car dans le cas là j'ai au lieu de récupérer juste "http://www.monsite.fr/photos/imgsdsd.jpg"
    je récupère "http://www.monsite.fr/photos/imgsdsd.jpgPAS UNE IMAGE" et je n'ai donc pas d'image qui s'affiche.

    comment dois-je modifier mon code pour récupérer indépendamment les valeurs de <Crit CLEF_CRITERE=".....

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    C'est normal, c'est ce que vous demandez !

    Et du coup, on ne sait pas ce que vous voulez, précisément et le code est incomplet. C'est les sous-éléments Crit qu'il faut logiquement atteindre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $dom = new DomDocument;
    //$dom->preserveWhiteSpace = FALSE;
    $dom->load('monFichier.xml');
     
    $crits = $dom->getElementsByTagName('Crit');
    foreach ($crits as $crit) {
        if (!empty($crit->nodeValue)) {
            echo '<img src="'. $crit->nodeValue . '" width="100" class="gauchebrd" /><br />';
        }
    }
    ? (non testé)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    J'ai essayé et comme sa ne fonctionne pas je reprend depuis le début.

    voici mon fichier XML :

    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
     
    <sit_liste>
        <NOM>Fini les vacances</NOM>
        <ADRPROD_CP>88250</ADRPROD_CP>
        <ADRPROD_TEL/>00 00 00 00 00<ADRPROD_TEL/>
        <ADRPROD_URL>www.unsite.com<ADRPROD_URL/>
        <COMMENTAIRE>infos sur l’actualité fini les vacances, retour à l’école</COMMENTAIRE>
        <CRITERES>
            <Crit CLEF_CRITERE="45" CLEF_MODA="4000014"/>
            <Crit CLEF_CRITERE="123" CLEF_MODA="102"/>
            <Crit CLEF_CRITERE="775" CLEF_MODA="0">http://www.monsite.com/ img4.jpg</Crit>
            <Crit CLEF_CRITERE="2323" CLEF_MODA="0">FAB</Crit>
            <Crit CLEF_CRITERE="4562" CLEF_MODA="1"/>
            <Crit CLEF_CRITERE="7897" CLEF_MODA="1"/>
            <Crit CLEF_CRITERE="32386" CLEF_MODA="2"/>
            <Crit CLEF_CRITERE="4658" CLEF_MODA="16"/>
        </CRITERES>
        <HORAIRES>
            <Horaire>
                <DATE_DEBUT fmt="DD/MM/YYYY">22/08/2011</DATE_DEBUT>
                <DATE_FIN fmt="DD/MM/YYYY">22/08/2011</DATE_FIN>
            </Horaire>
        </HORAIRES>
    </sit_liste>
    pour afficher les données via dom et php je fais :
    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
    <?php
    $fichier = 'http://www.sitedistant.fr/fichier.xml';
    $dom = new DOMDocument();
    if (!$dom->load($fichier)) {
        die('Impossible de charger le fichier XML');
    }
     
    $itemList = $dom->getElementsByTagName('sit_liste');
     
    foreach ($itemList as $item) 
    {
     
    $titre = $item->getElementsByTagName('NOM');
    	$titre = $titre->item(0)->nodeValue;
    	if ($titre != '') 
    	{
    echo '<h2>'.$titre.'</h2>'."\n";
    } 
     
    	$img = $item->getElementsByTagName('CRITERES');
    	$img = $img->item(0)->nodeValue;
    	if ($img != '') 
    	{
    echo ' <img src="'.$img.'" width="100" class="gauchebrd"><br/>';
    } 
     
     
    $commune = $item->getElementsByTagName('ADRPROD_LIBELLE_COMMUNE');
    if ($desc->length > 0)
    {
    echo ' Commune : '.$commune->item(0)->nodeValue.'<br/>'."\n";
    }
     
    $debut = $item->getElementsByTagName('DATE_DEBUT');
    if ($desc->length > 0) 
    	{
            	echo ' Du : '.$debut->item(0)->nodeValue ;
        	}
     
        	$desc = $item->getElementsByTagName('COMMENTAIRE');
       	 if ($desc->length > 0) 
    	{
            	echo ' '.$desc->item(0)->nodeValue.'<br/>'."\n";
        	}
    }
    ?>
    C'est lorsque j’essaie d'afficher les images qui sont dans Crit que sa bug.

    par exemple si j'ai dans mon xml juste un seul Crit avec valeur comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Crit CLEF_CRITERE="775" CLEF_MODA="0">http://www.monsite.com/ img4.jpg</Crit>
    ok je récupère bien et affiche une image avec php

    Mais si j'ai plusieurs résultats comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Crit CLEF_CRITERE="775" CLEF_MODA="0">http://www.monsite.com/ img4.jpg</Crit>
    <Crit CLEF_CRITERE="2323" CLEF_MODA="0">FAB</Crit>
    Alors la au lieu de récupérer uniquement http://www.monsite.com/ img4.jpg je récupère http://www.monsite.com/ img4.jpgFAB et je ne peu donc pas afficher l'image avec mon php. (je ne veux récupérer de Crit que le type image et rien d'autre pour le moment)

    j'ai essayé dans mon fichier php de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$img = $item->getElementsByTagName('CRITERES');
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$img = $item->getElementsByTagName('Crit');
    mais le problème est que je ne récupéré rien sauf si le 1er Crit contient qqc.

    J’espère que c'est plus claire et que vous pourrez m'aider.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    C'est normal, comme je vous l'ai déjà dit, puisque vous le faites depuis l'élément parent (CRITERES) alors que ce sont ses éléments Crit qu'il faut individuellement considérer.

    Et c'est, une fois de plus, normal de ne "récupérer" que le 1er Crit si vous faites un ->item(0) au lieu d'une boucle.

    PS : il y a éventuellement XPath comme solution (si ça convient), genre :
    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
    $xml = <<<EOX
    <sit_liste>
        <NOM>Fini les vacances</NOM>
        <ADRPROD_CP>88250</ADRPROD_CP>
        <ADRPROD_TEL>00 00 00 00 00</ADRPROD_TEL>
        <ADRPROD_URL>www.unsite.com</ADRPROD_URL>
        <COMMENTAIRE>infos sur l’actualité fini les vacances, retour à l’école</COMMENTAIRE>
        <CRITERES>
            <Crit CLEF_CRITERE="45" CLEF_MODA="4000014"/>
            <Crit CLEF_CRITERE="123" CLEF_MODA="102"/>
            <Crit CLEF_CRITERE="775" CLEF_MODA="0">http://www.monsite.com/img4.jpg</Crit>
            <Crit CLEF_CRITERE="2323" CLEF_MODA="0">FAB</Crit>
            <Crit CLEF_CRITERE="4562" CLEF_MODA="1"/>
            <Crit CLEF_CRITERE="7897" CLEF_MODA="1"/>
            <Crit CLEF_CRITERE="32386" CLEF_MODA="2"/>
            <Crit CLEF_CRITERE="4658" CLEF_MODA="16"/>
        </CRITERES>
        <HORAIRES>
            <Horaire>
                <DATE_DEBUT fmt="DD/MM/YYYY">22/08/2011</DATE_DEBUT>
                <DATE_FIN fmt="DD/MM/YYYY">22/08/2011</DATE_FIN>
            </Horaire>
        </HORAIRES>
    </sit_liste>
    EOX;
     
    $dom = new DomDocument;
    //$dom->preserveWhiteSpace = FALSE;
    $dom->loadXML($xml);
     
    foreach ($dom->getElementsByTagName('Crit') as $crit) {
        if (!empty($crit->nodeValue)) {
            echo '<img src="'. $crit->nodeValue . '" width="100" class="gauchebrd" /><br />';
        }
    }
     
    echo '<hr />';
     
    $xpath = new DomXPath($dom);
    foreach ($xpath->query('//Crit[starts-with(text(), "http://")]') as $r) {
        echo '<img src="' . $r->nodeValue . '" width="100" class="gauchebrd" /><br />';
    }

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    Dsl j'ai édité mon message alors que vous mettiez un réponse.

    j'ai essayé d’intégré votre code dans le mien mais j'ai un message d'erreur du style :
    Fatal error: Can't use method return value in write context in /homepages/12/454565656/htdocs/actus2.php on line 152
    en gros je ne sais pas comment modifier mon code pour y ajouter le votre.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    Ah ok dsl.
    j'ai donc remplacé dans mon fichier php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	$img = $item->getElementsByTagName('CRITERES');
    	$img = $img->item(0)->nodeValue;
    	if ($img != '') 
    	{
    echo ' <img src="'.$img.'" width="100" class="gauchebrd"><br/>';
    }
    par :

    foreach ($dom->getElementsByTagName('Crit') as $crit) {
    if (!empty($crit->nodeValue)) {
    echo '<img src="'. $crit->nodeValue . '" width="100" class="gauchebrd" /><br />';
    }
    }

    echo '<hr />';

    $xpath = new DomXPath($dom);
    foreach ($xpath->query('//Crit[starts-with(text(), "http://")]') as $r) {
    echo '<img src="' . $r->nodeValue . '" width="100" class="gauchebrd" /><br />';
    }
    du coup sa fonctionne mais en partie car a chaque boucle on retrouve toutes les images du xml au lieu de n'avoir que celle correspondant a la boucle affiché.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    C'est-à-dire ? sit_liste n'est pas la racine, il y en a plusieurs ?

    De toute façon, il y a juste à adapter les nœuds de référence à la structure réelle du document.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sits = $dom->getElementsByTagName('sit_liste');
    foreach ($sits as $sit) {
        # ...
        foreach ($sit->getElementsByTagName('Crit') as $crit) {
            if (!empty($crit->nodeValue)) { // + parse_url ?
                echo '<img src="'. $crit->nodeValue . '" width="100" class="gauchebrd" /><br />';
            }
        }
    }
    Ici, SimpleXML paraît plus approprié.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    par la suite je voudrai faire d'autre traitement sur le fichier xml (trie, recherche... mais bien plus tard. là j’essaie de comprendre comme sa fonctionne).

    C'est bon sa fonctionne. les photos s'affiche bien comme on veut.
    Un grand merci pour votre patience et votre partage de savoir.

Discussions similaires

  1. [2008R2] Contenu XML dans Colonne XML
    Par jkn1092 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/08/2014, 11h53
  2. [DOM] Récupérer le contenu XML affiché dans une Iframe
    Par esseki dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 26/06/2008, 16h08
  3. [DOM] lecture fichier XML avec DOM
    Par roosse dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 09/04/2008, 12h39
  4. [DOM] Afficher le contenu d'un xml
    Par furtif1 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/05/2007, 15h11
  5. [DOM] Lecture de XML et décision en fonction du contenu
    Par samios dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 14/10/2004, 16h09

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