8797 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un petit problème de compréhension avec DOMDocument.

J'ai un xml que je dois parser pour y récupérer les infos contenus et les mettre en forme dans une page PHP.

N'y connaissant rien en XML (ou plus ou moins pas grand chose) j'ai fais le tour des forums et je n'ai pas trouvé de réponse à mes questions.

Voici le XML :
<eligibility_response version="2.0">
	<product code="SDSL">
		<features>
			<info>
				<status code="0000"/>
				<nb_copper_pairs>1</nb_copper_pairs>
				<garanty>640 Kb ATM</garanty>
				<burst>2048 Kb ATM</burst>
				<messages>
					<message code="4024" type="alert"/>
					<message code="4008" type="alert"/>
				</messages>
			</info>
			<operator>FT</operator>
			<profile>Lien SDSL T500 1P FT</profile>
		</features>
		<features>
			<info>
				<status code="0000"/>
				<nb_copper_pairs>1</nb_copper_pairs>
				<garanty>1280 Kb ATM</garanty>
				<burst>2048 Kb ATM</burst>
				<messages>
					<message code="4024" type="alert"/>
					<message code="4008" type="alert"/>
				</messages>
			</info>
			<operator>FT</operator>
			<profile>Lien SDSL T1000 1P FT</profile>
		</features>
	</product>
	<product code="ADSL">
		<features>
			<info>
				<status code="0003"/>
				<messages>
					<message code="9999" type="error"/>
					<message code="3021" type="reason"/>
				</messages>
			</info>
			<operator>FT</operator>
			<profile>Lien ADSL 512Kb RE FT</profile>
		</features>
		<features>
			<info>
				<status code="0002"/>
				<messages>
					<message code="9999" type="error"/>
				</messages>
			</info>
			<operator>FT</operator>
			<profile>Lien ADSL 512Kb FT</profile>
		</features>
	</product>
</eligibility_response>


Le PHP :

$doc_AL = new DomDocument();
$doc_AL->load('0149819891.xml'); //fichier en local pour les tests mais au final se sera une URL externe
$res= $doc_AL->getElementsByTagName("product");
foreach($res as $product){
	if ($product->getAttribute("code") == "SDSL"){
                
        }
}


Ma première question (en espérant qu'il n'y en ait pas d'autre) est comment lire uniquement le résultat de $product pour stocker les infos dans un array?

Ma première idée a été de faire un if mais à partir de la je ne sais pas lire les info contenu dans les variables...

PS: avant de poster cette question j'ai été faire un tour sur une bonne dizaine de site, donc essayez de ne pas me renvoyer vers php.net par exemple. Merci Smiley biggrin
Modifié par genesis (03 Jan 2012 - 12:47)
Je l'ai déjà lu, mais il n'explique pas comment sélectionner un nœud à partir de son attribut

Dans mon exemple j'ai 2 balises <product> avec des attributs différents "SDSL" et "ADSL"

Comment les distinguer?
a écrit :
On peut aussi chercher un élément par la valeur de son attribut de type ID, si celui-ci est spécifié dans une DTD associée et si le document a été validé (si vous voulez simplement chercher un élément selon la valeur de son attribut id, il faudrait passer par un objet DomXPath. Peut-être, dans une prochaine version du tutoriel...)


Donc en gros, si tu n'as pas d'élément de type ID, il faut soit faire une boucle pour tester au cas par cas les attributs de tes nœuds products soit utiliser DomXPath (pas forcément activé sur tout les hébergements, à vérifier).
Modifié par bzh (03 Jan 2012 - 16:33)
Désolé pour la réponse tardive mais merci pour toutes les infos.
J'ai finalement opté pour une solution moins flexible.

Je sais que j'ai 3 "product" donc je boucle en testant ensuite les attributs.