Page 1 sur 1

Principe de base de parcours d'un document XML en php5

Posté : 15 nov. 2007, 19:38
par Or3
Bonjour,

Je suis toute novice dans le domaine du parser xml.
Je voudrai faire qqchose de très simple, et j'ai beau chercher je n'y arrive pas.
Voilà ce que je voudrai :
Faire afficher le couple Nom - Valeur des différents noeuds (ceux apres <item>) d'un doc xml que voici :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <item already_exported="true" id="10280201"> <BRP_M_Marque><![CDATA[SAINT ALBRAY PRE EMBALLE]]></BRP_M_Marque> <BRP_M_BRP_M_NomCommercial><![CDATA[ST ALBRAY PORTION PE 200G POIDS FIXE PROMO]]></BRP_M_BRP_M_NomCommercial> <BRP_M_Variete></BRP_M_Variete> <BRP_M_NumAgrement></BRP_M_NumAgrement> <BRP_M_GencodUB><![CDATA[3222110017298]]></BRP_M_GencodUB> </item> </items>
et voici mon code php5 :
<?php
$dom = new DOMDocument;
$dom->load('produits.xml');

$params = $dom->childNodes;

foreach ($params as $param) {
       echo "Nom : ".$param -> nodeName." - ";
	   echo "Valeur : ".$param -> nodeValue.'<br>';
}
?> 
Ce qui renvoie tout un niveau trop haut...comment faire pour "descendre" dans les niveaux de noeuds ?

Merci de votre aide,

Aurélie

Posté : 15 nov. 2007, 19:44
par zeus
Puisque tu utilises PHP5, je te conseille de te tourner vers SimpleXML qui est beaucoup plus facile à utiliser ;)

Posté : 15 nov. 2007, 19:53
par Victor BRITO
Puisque tu utilises PHP5, je te conseille de te tourner vers SimpleXML qui est beaucoup plus facile à utiliser ;)
Ce qui donne :
$xml = simplexml_load_file ('produits.xml');
// Accès aux nœuds item
$item = $xml -> item;
// Boucle foreach (utile s'il y a plusieurs nœuds item dans le fichier)
foreach ($item as $valeur)
{
  // Accès à chacun des nœuds fils du nœud item actuellement parcouru
  echo ((string) $valeur -> BRP_M_Marque);
  echo ((string) $valeur -> BRP_M_BRP_M_NomCommercial);
  echo ((string) $valeur -> BRP_M_Variete);
  echo ((string) $valeur -> BRP_M_NumAgrement);
  echo ((string) $valeur -> BRP_M_GencodUB);
}

Posté : 15 nov. 2007, 20:24
par zeus
Ah mais si tu donnes la solution toute faites, c'est pas drôle :lol:

Posté : 15 nov. 2007, 21:35
par Hubert Roksor
@Victor BRITO: c'est bizarre, tu mets des espaces à de drôles d'endroits :?:

Quand vous utilisez SimpleXML, il y a quelque chose que je recommande TRÈS FORTEMENT c'est de systématiquement nommer les variables du nom du nœud qu'elles représentent. En l'occurence :
$items = simplexml_load_file('produits.xml'); 

foreach ($items->item as $item) 
{ 
	echo $item->BRP_M_Marque;
	// etc...
}
...de cette façon, pas la peine de se demander si /items/item est dans $item, $valeur, ou $mon_produit. Si le nœud est "item", la variable est "$item".

Posté : 15 nov. 2007, 21:50
par Victor BRITO
@Victor BRITO: c'est bizarre, tu mets des espaces à de drôles d'endroits :?:
Je ne vais pas non plus faire générer des liens vers le manuel. Non, mais... :langue:

Posté : 16 nov. 2007, 11:58
par Or3
Merci mille fois à tous !

J'ai l'impression oui que tout ceci est beaucoup plus simple que le DOM !
Je me mets sur la doc...

et surement à bientôt ! ;o)

Aurélie