Inverser un fichier xml

zenouba2005 Messages postés 24 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 6 mars 2006 - 5 sept. 2005 à 15:54
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 6 sept. 2005 à 18:04
salut
jé un fichier xml je veux une fonction php qui l'inverse
voila un exemple
voila mon fichier xml


<c/>
<d/>

voila ce que je veux comme resultat

<d/>
<c/>


merci pour vous

18 réponses

ashboody Messages postés 91 Date d'inscription samedi 30 mars 2002 Statut Membre Dernière intervention 11 octobre 2005
5 sept. 2005 à 20:12
t'en a d'autres des pb a la con comme cela ? tu veux inverser quoi réellement ? les balises ouvrantes/fermantes ? et dans le cas d'une balise unique ?
quoi qu'il en soit jette un oeil aux fonctions de parsage XML
xml_set_element_handler, xml_set_character_data_handler, xml_set_default_handler

bon courage
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
5 sept. 2005 à 20:15
Salut,



La fonction xml_parse_into_struct() va te traduire ton fichier XML en un arbre de données.



Ensuite, tu attrape cet arbre par la queue grâce à un jeu de fonctions array_pop() pour reconstruire un fichier xml "inversé".



Je te laisse bouquinner cette solution et faire ton algo de parcours d'arbre. C'est le plus intéressant en prog ;)





xml_parse_into_struct(http://fr.php.net/manual/fr/function.xml-parse-into-struct.php)

<hr size="2" width="100%">6 C pa ça Fo L'dir, Pi 6 C ça Fo L'Dir oci... Br'F 10t le !!!
Doc officielle de PHP en français -
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 sept. 2005 à 20:48
Salut,



$fichier=file('fichier.xml');

print_r(array_reverse($fichier,TRUE));



regarde la source générée

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 sept. 2005 à 10:18
J_G => pour inverser un tableau, tu joues avec de array_pop ? Tu es un warrior ;-)



Pour le problème, je n'ai pas bien saisi ce qu'il veut faire non plus. Fais attention à la racine, elle ne doit pas bouger.

Un mix de la solution de J_G et d'Antho devrait t'amener à quelquechose.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
6 sept. 2005 à 10:25
Salut les gars,



Je me suis essayé sur ce petit problème hier soir... Ben chuis pas un Warrior!!!

La fonction xml_parse_into_struct est un peu toute nase.



L'outil le plus adapté à ce genre de pb est le jeu de classes DOM

(DomElement, DomDocument, DomNode, DOMtruc...)

Une fois qu'on l'a en main, c'est facile (je l'avais utilisée en C++)

Mais pas réussi à configurer easyPHP pour les accepter dans les 10 minutes => abandon.



En tout cas je retire ce que j'ai dis : c'est loin d'être trivial et la fonction xml_parse_into_bordel et toute nulle!!!



Bon courage,
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 sept. 2005 à 12:19
hello,



bon, devant la baissée des bras ;-) je t'ai écrit une petite fonction à 2 balles pour faire ce que tu veux faire.

Attention, c'est juste un exemple, et ça ne fonctionnera qu'avec un xml
simple. De plus j'ai utilisé DOM et simplexml histoire de te montrer 2
façons de jouer avec le xml en php5. Ca peut être simplifié.



<?php

$xmlStr = <<<XML

<?xml version="1.0" encoding="UTF-8"?>

<racine>

bla

blb

<c>blc</c>

</racine>

XML;

reverseXml ($xmlStr);



function reverseXml ($xmlStr) {

$dom = new DOMDocument('1.0', 'iso-8859-1');

$read = new DOMDocument();

$read -> loadXML ($xmlStr);

$element = $dom -> appendChild( new DOMElement($read -> firstChild -> nodeName));

$simple = simplexml_load_string ($xmlStr);

foreach ($simple -> children () as $node => $valeur) {

$tab[$node] = $valeur;

}

$tab = array_reverse ($tab);

foreach ($tab as $node => $valeur) {

$element_ns = new DOMElement($node, $valeur);

$element -> appendChild($element_ns);

}

if ($dom -> save('test.xml')) {

echo 'sauvegarde r&ecute;ussie';

}

else {

echo 'sauvegarde &ecute;chou&ecute;e';

}

}

?>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 sept. 2005 à 16:37
$fichier=file('fichier.xml');



$tableau=array_reverse($fichier,TRUE);



foreach($tableau AS $valeur)

{

echo $valeur,'
';

}



je pense que ça doit correspondre à ce que tu veux en simple et rapide :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 sept. 2005 à 16:44
Nan, tu oublies la racine. Et tu vas perdre de toutes façons complètement tes noeuds, comme ça.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 sept. 2005 à 17:09
ça fonctionne parfaitement chez moi pourtant, ça donne bien un fichier inversé :-)



<?php

$fichier=file('fichier.xml');



$tableau=array_reverse($fichier,TRUE);



foreach($tableau AS $valeur)

{

echo htmlentities($valeur),'
';

}

?>



histoire d'avoir l'affichage dans le navigateur

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 sept. 2005 à 17:15
Ben non, tu inverses la racine...et la déclaration.

Et en plus, ça va dépendre comment est écrit ton xml.



si tu as :

bla

blb



ok ça va inverser.



Mais si tu as :





bla





blb





c'est le bordel...de même si tu as :



blablb



Bref...un fichier xml c'est fragile... ;-) Il vaut vraiment mieux utiliser les fonctions dédiées pour jouer avec.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 sept. 2005 à 17:37
Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
zenouba2005 Messages postés 24 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 6 mars 2006
6 sept. 2005 à 17:42
oui c'est ça comme sa que je veux
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 sept. 2005 à 17:43
Ouais je sais lol. Le problème c'est qu'un fichier xml n'obéit pas aux
règles des retours à la ligne, mais au niveau des noeuds. Donc il faut
absolument se baser là-dessus pour travailler sur un tel fichier.
Sinon, c'est la merde assurée. Si tu génères un fichier xml avec
l'extension DOM, tu verras qu'une fois enregistré, il est tout à la
ligne, sans aucun retour chariot. Si tu l'ouvres sous un logiciel genre
XMLSpy, tu pourras le remettre en forme, mais bon...la mise en forme
n'a aucune influence sur son ordre. C'est pour ça que j'ai fait plus
compliqué que toi ;-)

Mais bon, c'est une question d'habitude : je me suis tellement fait chier avec le xml, lol...que j'ai pris certaines habitudes.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 sept. 2005 à 17:45
Zenouba => ben essaye mon script. Puis tu l'adaptes à tes besoins.
0
zenouba2005 Messages postés 24 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 6 mars 2006
6 sept. 2005 à 17:49
malalam jé essayé avec ton script mé voila les pb qui ma donné
Fatal error: Call to undefined function: loadxml() in c:\program files\apache group\apache\htdocs\smartlearning\index.php on line 12

comment resoudre ce pb
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 sept. 2005 à 17:54
D'abord c'est loadXML (), ensuite, est-ce que tu as php5 ?
0
zenouba2005 Messages postés 24 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 6 mars 2006
6 sept. 2005 à 17:57
non jé php4
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 sept. 2005 à 18:04
Alors regarde l'extension DOM XML dans la doc, et remplace ce qui est à
remplacer (je ne vais pas te macher tout le travail non plus ;() ).
Commence par loadXML qui n'existe en effet pas avec l'extension DOM
XML. Cherche son équivalent...teste...et recommence pour toute fonction
posant un problème (il ne doit pas y en avoir des masses).
0
Rejoignez-nous