Parser un xml simple

refpartie

WRInaute discret
Bonjour,

Je souhaiterai parser un xml (via php), mais les exemples sur le net sont bien plus évolués que ce que je veux faire.

J'ai un fichier xml formaté comme suit :

<data>
<infos>l'info 1</infos>
<infos>l'info 2</infos>
<infos>l'info 3</infos>
</data>

je voudrais parcourir ce fichier et afficher dans ma page php :

La listes des infos :
l'info 1
l'info 2
l'info 3

C'est pas bien dur, mais je n'y arrive pas :(

Merci pour votre aide
 

Bool

WRInaute passionné
bonsoir,

as tu regardé du coté de SimpleXML ? car on peut difficilement faire plus simple justement :p
 

refpartie

WRInaute discret
Merci pour vos réponse, mais pas si simple tout ca ^^

j'ai un bout de script, mais ca ne m'affiche que le premier <infos>

function lit_xml($fichier,$item,$champs) {
$compt = 0;

if($chaine = @implode("",@file($fichier))) {
$tmp = preg_split("/<\/?".$item.">/",$chaine);

for($i=1;$i<sizeof($tmp)-1;$i+=2)

// ========= dois y avoir une erreur dans ce qui suit? =======

foreach($champs as $champ) {
$val = preg_split("/<\/?".$champ.">/",$tmp[$i]);
$tmp2[$compt] = $val;
$compt = $compt + 1;
}
return $tmp2;
}
}

//Lecture
$xml = lit_xml("monfichier.xml","data",array("infos"));


$i=0;
foreach($xml as $row) {
$i = $i + 1;
echo $row[$i];
}

Merci pour votre aide
 

Bacteries

WRInaute passionné
C'est amusant de voir le nombre de personne qui tente de lire un fichier XML avec des fonctions de string (refpartie je ne me moque pas, juste un constat). Alors que justement le format XML est fait pour être accédé de façon simple via des librairies faites pour...

Sinon oui pour rabacher : simpleXML.
 

refpartie

WRInaute discret
Effectivement le traitement d'un fichier xml bien construit est vraiment simple avec SimpleXML
Mais mon fichier ne répond pas au norme d'un fichier XML.

<data>
<infos><b>L'info du jour</b><br/>Détails de l'info <div align="center">texte texte</div></infos>
<infos><b>L'info de la veille</b><br/>Détails de l'info <div align="center">texte texte</div></infos>
</data>

Mon fichier n'a pas de doctype et autres... je dois donc le prendre comme un fichier "Texte"


Voilà, je demande une SimpleAide :)

Merci à vous

ps : malheureusement je ne peux pas adapter le format du fichier xml
 

Bool

WRInaute passionné
Euh je traite parfaitement des fichiers XML sans le moindre doctype avec simpleXML justement.
 

Bacteries

WRInaute passionné
refpartie a dit:
<data>
<infos><b>L'info du jour</b><br/>Détails de l'info <div align="center">texte texte</div></infos>
<infos><b>L'info de la veille</b><br/>Détails de l'info <div align="center">texte texte</div></infos>
</data>

A quelle niveau c'est pas un XML valide?
C'est du xHTML là (car <br/>) donc valide xml.
 

aladdin

WRInaute passionné
heuuu je ne sais pas si je suis le seul à le penser, mais les parseurs XML ne sont pas fait pour ce que tu souhaite faire !
Il faut distinguer deux choses quand on manipule de l'XML

1 - le fichier XML stock de l'information qu'on va traiter, un fichier de configuration par exemple, dans ce cas, parser du XML est justifié et on ne peux pas faire autrement


2 - le fichier XML contient des données qu'on souhaite formater (ton cas), et dans ce cas là, il y a XSL qui est beaucoup beaucoup plus simple pour ce que tu souhaite faire

un truc du genre

Code:
...
<xsl:for-each select="/data/infos">
<xsl:value-of select="text()" />
</xsl:for-each>
...

après tu peux appliquer une transformation coté client ou coté serveur en fonction de tes besoins.
 

aladdin

WRInaute passionné
Leonick a dit:
XSL côté serveur, je ne vois pas trop l'intérêt. Côté client oui.

bein tous les clients ne supportent pas la transformation XSL ... bon la plupart le font je sais ... mais ça dépend des cas d'utilisation (terminaux mobiles par exemple)

sinon l'utilité coté serveur c'est que ca reste toujours plus simple de mettre en forme de l'XML via une transformation XSL que de le parser !

XML/XSL pour la mise en forme c'est le même principe que les templates pour les CMS, donc que la transformation se fasse coté serveur ou coté client ca ne change rien ;)
 

Leonick

WRInaute accro
aladdin a dit:
sinon l'utilité coté serveur c'est que ca reste toujours plus simple de mettre en forme de l'XML via une transformation XSL que de le parser !
C'est "visuellement" plus simple, mais le fichier devra quand même être parsé, si ce n'est par siplexml, ça sera par le processeur xslt, qui, soit dit en passant, n'est pas obligatoirement installé sur tous les serveurs web.
aladdin a dit:
XML/XSL pour la mise en forme c'est le même principe que les templates pour les CMS, donc que la transformation se fasse coté serveur ou coté client ca ne change rien ;)
justement, ça consomme beaucoup de ressources pour effectuer des fonctions basiques.
 

RiPSO

WRInaute impliqué
Bon... après le SimpleXML voici le MegaSimpleParser :mrgreen:

Code:
<?php

$texte="<data>
<infos>l'info 1</infos>
<infos>l'info 2</infos>
<infos>l'info 3</infos>
</data> ";

function MegaSimpleParser($mot,$txt) {
	$ret=array(); //initialisation de la variable dans le cas où il n'y ai pas de résultat
	if (@preg_match_all("!<".$mot.">(.*?)</".$mot.">!",$txt,$res)) {
		$ret=$res[1];
	}
	return $ret;
}

print_r(MegaSimpleParser("infos",$texte));

?>

[edit] correction du script car ça buggait si il n'y avait pas de résultat. Maintenant ça fonctionne :mrgreen:
 

aladdin

WRInaute passionné
@Leonick : on est bien d'accord xslt n'est rien d'autre qu'a parseur, et il consomme des ressources oui et c'est à utiliser après avoir bien étudié le besoins... bref ce que je veux dire c'est sur le principe d'utilisation.
pour les problèmes de ressources ...etc y a toujours des solution, un cache du rendu html par exemple. et pour le parseur xslt coté serveur, il est installé sur la plupart des hebergements php5 et au pire on peut demander de l'installer.

mais je suis bien d'accord avec toi dans ce que tu as dis ;)
 

Discussions similaires

Haut