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] avoir le contenu d'un sous noeud en fonction de l'attribut


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut [DOM] avoir le contenu d'un sous noeud en fonction de l'attribut
    Bonjour,
    Je souhaiterais par exemple afficher juste le contenu des attributs 'src' du noeud 'album' qui a pour attribut 'tennis'.
    Code XML : 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
     
    <albums>
      <parametre longueur="30" largeur="40" /> 
     <album nom="vacance">
    	<images>
    		<image src="01.jpg"></images>
    		<image src="02.jpg"></images>
    	<images>
    </album>  
    <album nom="foot">
    	<images>
    		<image src="03.jpg"></images>
    		<image src="04.jpg"></images>
    	<images>
    </album> 
     <album nom="tennis">
    	<images>
    		<image src="05.jpg"></images>
    		<image src="06.jpg"></images>
    	<images>
     </album>
     </albums>
    pour le moment j' ai 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
     
    <?php
    	if(!empty($_POST['affichnom']))
    	{
    		$nom_sport = $_POST['affichnom'];
    		header('Content-Type: text/html; charset=ISO-8859-1');
    		$doc = new DOMDocument('1.0','ISO-8859-1');
    		$doc->load('sport.xml');	
    		$parent = $doc->getElementsByTagName('album');
     
    		foreach($parent as $a)
    		{
    		if($a->getAttribute('src') == $nom_sport)
    		{
    			$enfant = $doc->getElementsByTagName('image');
    			foreach($enfant as $e)
    			{
    				print($e->getAttribute('src'));
     
    			}	
     
    		}
     
    	}}
    	?>
    mais ça m'affiche tout les attributs 'src' de toutes les balises <image>
    si ça avait été en mysql j'aurais juste utiliser un WHERE et le tour était joué,
    mais en DOM je ne sais pas comment faire ... ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Utiliser XPath. Le chemin XPath serait alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    album[@nom='tennis']//image/@src
    En n'utilisant que DOM, il faut simplement prendre la bonne balise album, et prendre ses enfants.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut
    merci pour ta réponse,
    c'est la première fois que je vois l'existence du Xpath,
    j'ai essayer de regarder dans d'autre post qui traite plus ou moins de la même chose mais je ne sais pas comment le placer dans ce code-ci,
    pourrais tu m'en dire un tout petit peu plus ?

    merci d'avance

  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 777
    Points
    17 777
    Par défaut
    Dans votre code il y a deux erreurs :
    1. C'est l'attribut "nom" et non "src" des éléments album qu'il faut comparer :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if($a->getAttribute('nom') == $nom_sport)
    2. L'extraction des éléments image doit porter sur l'élément album courant et non sur le document entier :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $enfant = $a->getElementsByTagName('image');


    Avec XPath, à titre d'exemple, voilà comment nous aurions pu procéder :
    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
    <?php
    if (!empty($_POST['affichnom']))
    {
        $doc = new DomDocument('1.0', 'ISO-8859-1');
        $doc->load('sport.xml');
        $nom_sport = get_magic_quotes_gpc() ? stripslashes($_POST['affichnom']) : $_POST['affichnom'];
        $xpath = new DomXPath($doc);
        $query = $xpath->query(sprintf('/albums/album[@nom = "%s"]/images/image', utf8_encode($nom_sport)));
        foreach ($query as $img) {
            echo $img->getAttribute('src');
        }
    }
    ?>
     
    <form method="post">
        Nom : <input type="text" name="affichnom" value="" />
        <br />
        <input type="submit" value="Valider" />
    </form>
    Note : le document XML fourni n'a rien d'un document valide : il y a des problèmes sur les balises image et images

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 190
    Points : 80
    Points
    80
    Par défaut
    ça fonctionne
    un super grand merci

    bonne fin de journée

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

Discussions similaires

  1. [DOM] Supprimer tout un noeud en fonction d'un attribut
    Par pobrouwers dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/04/2015, 19h38
  2. autoriser contenu nul d'un élément en fonction de l'attribut
    Par Waldoo dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 15/06/2011, 15h07
  3. [DOM] changer le contenu d'un noeud
    Par thefaycal dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 06/08/2009, 13h47
  4. [XSLT] Regrouper les noeuds en fonction d'un attribut
    Par Creuvard dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/12/2008, 11h31
  5. [DOM] Accès au contenu textuel d'un noeud avec DOM
    Par comexe2 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/07/2004, 15h41

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