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] savoir si un noeud a des enfants avec hasChildNode


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] savoir si un noeud a des enfants avec hasChildNode
    Bonjour à tous
    Voila ici par exemple la balise <images> dans l'album "vacance" ne possède pas d'enfants. j'essaye d'utiliser hasChildNodes mais il me retourne tout le temps TRUE
    code xml:
    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
     
    <albums>
      <parametre longueur="30" largeur="40" /> 
     <album nom="vacance">
    	<images>
                     //ici je fait expres de ne rien mettre pour que ça retourne false   
    	</images>
    </album>  
    <album nom="foot">
    	<images>
    		<image src="03.jpg"></image>
    		<image src="04.jpg"></image>
    	</images>
    </album> 
     <album nom="tennis">
    	<images>
    		<image src="05.jpg"></image>
    		<image src="06.jpg"></image>
    	</images>
     </album>
     </albums>
    bout de code php:

    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
    $doc = new DOMDocument('1.0','ISO-8859-1');
    $xml = 'sport.xml';
    $doc->load($xml);
    $parent = $doc->getElementsByTagName('album');
    foreach($parent as $a)
     {
         if($a->getAttribute('nom') == $sport)
        {				
            $images = $a->getElementsByTagName('images');		
    	foreach($images as $image)	
    	{
    	//si la balise <images> à des noeud enfants						         if($image->hasChildNodes()==TRUE)
    	 {
    	   print('true');die();
    	   break;
    	}
    	if($image->hadChilNodes()==FALSE)
    	{
    	   print('y en a pas');die();
    	   break;
    	}
    	}
    }
     }
    je pensais que mon code php était correcte :s mais apparemment non..

  2. #2
    Membre averti Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Points : 342
    Points
    342
    Par défaut
    Et ta variable $sport elle sort d'où ?

  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
    $sport c'est un $_POST[''] avec le nom de l'album. exemple ("tennis", "foot")
    j'ai mis juste une portion du code.

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par starr
    Voila ici par exemple la balise <images> dans l'album "vacance" ne possède pas d'enfants.
    Si si, c'est un noeud texte ne contenant que des caractères invisibles.

    => Ici il y a un fils

    => Pas de fils, noeud vide


    Question bonus pour voir si t'as bien compris : combien de fils pour la balise <images> suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <images>
        <image src="03.jpg"></image>
        <image src="04.jpg"></image>
    <images>
    ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  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
    mon code la est uniquement un code exemple et pas celui que j'utilise
    sur le mien les balises était fermée,
    "désolé"
    c'est corrigé.


    je reste malheureusement tout les temps avec la réponse "TRUE"
    donc si quelqu'un peu me donner un coup de main...
    merci d'avance

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par starr
    mon code la est uniquement un code exemple et pas celui que j'utilise sur le mien les balises était fermée,
    "désolé"
    c'est corrigé.

    je reste malheureusement tout les temps avec la réponse "TRUE"
    donc si quelqu'un peu me donner un coup de main...
    merci d'avance
    Et bien donne-nous un extrait *fonctionnel* de ton script PHP ainsi qu'une portion de ton XML afin qu'on puisse voir nous-même ce qui cloche
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    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
    le code php fonctionnel est celui écrit la,...

    et le xml est maintenant corrigé


    si quelqu'un à une idée de pourquoi ça renvois tout le temps "true"
    je vous écoute?

    merci d'avance

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    Là actuellement le PHP ne ressemble plus à rien.
    En ce qui me concerne voilà ce que j'appelerais du code fonctionnel :

    sport.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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <albums>
        <parametre longueur="30" largeur="40" /> 
        <album nom="vacance">
            <images></images>
        </album>  
        <album nom="foot">
            <images>
                <image src="03.jpg"></image>
                <image src="04.jpg"></image>
            </images>
        </album> 
        <album nom="tennis">
            <images>
                <image src="05.jpg"></image>
                <image src="06.jpg"></image>
            </images>
        </album>
    </albums>
    sport.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
        $xml = new DOMDocument('1.0','ISO-8859-1') ;
        $xml->load('sport.xml') ;
        $albums = $xml->getElementsByTagName('album') ;
        foreach ( $albums as $album ) {
            $nom = $album->getAttribute('nom') ;
            $images = $album->getElementsByTagName('images')->item(0) ; 
            echo "album[@nom='$nom'] a des fils : ",
                $images->hasChildNodes( ) ? 'oui' : 'non', '<br>' ;
        }
    ?>
    Cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    album[@nom='vacance'] a des fils : non
    album[@nom='foot'] a des fils : oui
    album[@nom='tennis'] a des fils : oui
    Donc il devait y avoir une erreur qque part dans ton script
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    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
    Citation Envoyé par Séb.
    Si si, c'est un noeud texte ne contenant que des caractères invisibles.

    => Ici il y a un fils
    Pour information on peut les faire ignorer en modifiant la valeur de l'attribut preserveWhiteSpace de votre objet DomDocument :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $xml = new DOMDocument('1.0', 'ISO-8859-1');
    $xml->preserveWhiteSpace = FALSE;
    $xml->load('sport.xml');
    # ...
    Et le faire reformater via l'attribut formatOutput (valeur TRUE) lors du dump (méthodes save(HTML|HTMLFile|XML)?).

  10. #10
    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
    voila, finalement tout fonctionne bien, merci pour votre aide

    bonne nuit à tous

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/10/2014, 15h32
  2. [XPATH] savoir si un noeud a des enfants d'un certain type
    Par enzostar dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 06/04/2010, 22h46
  3. [JDOM] Récupération des enfants d'un noeud
    Par GLDavid dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 12/10/2005, 11h11
  4. Detection des enfants avant leurs construction
    Par qqchose dans le forum C++
    Réponses: 10
    Dernier message: 12/02/2005, 17h39
  5. Réponses: 23
    Dernier message: 22/04/2004, 11h55

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