Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/07/2007, 16h33   #1
Membre du Club
 
Inscription : juillet 2006
Messages : 191
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 191
Points : 47
Points : 47
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 :
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 :
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..
starr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 16h46   #2
Membre éclairé
 
Avatar de nicocsgamer
 
Inscription : mars 2005
Messages : 324
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Luxembourg

Informations forums :
Inscription : mars 2005
Messages : 324
Points : 365
Points : 365
Envoyer un message via MSN à nicocsgamer
Et ta variable $sport elle sort d'où ?
nicocsgamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 16h55   #3
Membre du Club
 
Inscription : juillet 2006
Messages : 191
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 191
Points : 47
Points : 47
$sport c'est un $_POST[''] avec le nom de l'album. exemple ("tennis", "foot")
j'ai mis juste une portion du code.
starr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 17h41   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 827
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 827
Points : 3 459
Points : 3 459
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 :
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 17h56   #5
Membre du Club
 
Inscription : juillet 2006
Messages : 191
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 191
Points : 47
Points : 47
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
starr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 18h00   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 827
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 827
Points : 3 459
Points : 3 459
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 18h04   #7
Membre du Club
 
Inscription : juillet 2006
Messages : 191
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 191
Points : 47
Points : 47
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
starr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 18h28   #8
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 827
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 827
Points : 3 459
Points : 3 459
Là actuellement le PHP ne ressemble plus à rien.
En ce qui me concerne voilà ce que j'appelerais du code fonctionnel :

sport.xml :

Code :
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 :
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 :
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2007, 19h17   #9
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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)?).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2007, 00h10   #10
Membre du Club
 
Inscription : juillet 2006
Messages : 191
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 191
Points : 47
Points : 47
voila, finalement tout fonctionne bien, merci pour votre aide

bonne nuit à tous
starr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h12.


 
 
 
 
Partenaires

Hébergement Web