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 20/07/2007, 12h21   #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] 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 :
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 :
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 ... ?
starr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 13h57   #2
Membre chevronné
 
Inscription : juillet 2002
Messages : 842
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 842
Points : 647
Points : 647
Utiliser XPath. Le chemin XPath serait alors :

Code :
album[@nom='tennis']//image/@src
En n'utilisant que DOM, il faut simplement prendre la bonne balise album, et prendre ses enfants.
Blustuff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 16h48   #3
Membre du Club
 
Inscription : juillet 2006
Messages : 191
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 191
Points : 47
Points : 47
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
starr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 16h52   #4
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
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 :
    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 :
    $enfant = $a->getElementsByTagName('image');

Avec XPath, à titre d'exemple, voilà comment nous aurions pu procéder :
Code :
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
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 17h24   #5
Membre du Club
 
Inscription : juillet 2006
Messages : 191
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 191
Points : 47
Points : 47
ça fonctionne
un super grand merci

bonne fin de journée
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 22h50.


 
 
 
 
Partenaires

Hébergement Web