Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 30/01/2012, 17h36   #1
Membre du Club
 
Avatar de Freedolphin
 
Inscription : février 2006
Messages : 145
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 145
Points : 47
Points : 47
Par défaut Parser flux XML sur plusieurs niveaux

Bonjour,

J'arrive à récupérer les données d'un flux XML, sauf quand une donnée "descend" d'un noeud.
Exemple du flux :
Code :
1
2
3
4
5
6
7
<product>
<referent>XXX</referent>
<name>NOM</name>
<extras>
      <reference>12345</reference>
</extras>
</product>
Je peux sans problème récupérer les données "referent" et "name" mais pas "reference" qui appartient à "extras".

Mon code pour parser est le suivant :
Code :
1
2
3
4
5
$racine = $parser->documentElement();
$livres = $racine->getElementsByTagName('PRODUCT');
	foreach($livres->tag_array as $livre)
	{
	$nom = $livre->getDataItem(1);
Savez-vous comment récupérer la donnée inclue dans "reference" ?
Merci d'avance !
__________________
Le mieux n'est pas forcément l'ennemi du bien.
Freedolphin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 18h21   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Solution 1: utilise DOMNode::$childNodes (après avoir vérifié qu'il existe des noeuds enfants avec hasChildren).

Ex.
Code :
1
2
3
4
5
$node = $doc->getElementById('first');
if ($node->hasChildren()) {
  // let's take the 3rd child
  $child = $node->childNodes->item(3);
}
Solution 2: utilise XPath.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 18h42   #3
Membre du Club
 
Avatar de Freedolphin
 
Inscription : février 2006
Messages : 145
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 145
Points : 47
Points : 47
Merci Benjamin pour ta réponse mais je ne maitrise ni l'une ni l'autre des solutions. En plus, j'ai oublié de préciser que je suis sous PHP4 (enfin, je crois).

J'ai bricolé une deuxième boucle et ça fonctionne :
Code :
1
2
3
4
5
		$search = $livre->getElementsByTagName('EXTRAS');
				foreach($search->tag_array as $searchabo)
				{
				$abo = $searchabo->getDataItem(0);
				}
__________________
Le mieux n'est pas forcément l'ennemi du bien.
Freedolphin 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 06h59.


 
 
 
 
Partenaires

Hébergement Web