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

Or3
Petit nouveau ! | 2 Messages

15 nov. 2007, 19:38

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 nov. 2007, 19:44

Puisque tu utilises PHP5, je te conseille de te tourner vers SimpleXML qui est beaucoup plus facile à utiliser ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 2937 Messages

15 nov. 2007, 19:53

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);
}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 nov. 2007, 20:24

Ah mais si tu donnes la solution toute faites, c'est pas drôle :lol:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

15 nov. 2007, 21:35

@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".

Mammouth du PHP | 2937 Messages

15 nov. 2007, 21:50

@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:

Or3
Petit nouveau ! | 2 Messages

16 nov. 2007, 11:58

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