Bonjour,
J'ai un fichier XML dans lequel il y a, entre autres, des elements de ce type:
Bien sur il est assez problematique de manipuler un fichier pareil puisqu'il y a des guillemets partout. Pour ce que j'en ai vu, le cas se presente dans les balises SEGMENTREF, entre 'DESCRIPTION="' et '" XMLCOMMENT'
Code : Sélectionner tout - Visualiser dans une fenêtre à part <SEGMENTREF ID="684135" SMARTNAME="opopop" STATUS="C" REPETITION="1" DESCRIPTION="bout de "description" et "op " XMLCOMMENT="" TAG="CAR" />
J'ai donc essaye de lire les lignes du fichier une par une pour 'a chaque fois, s'il y a bien ces deux termes, modifier la chaine de caractere comprise entre eux.
Pour la modifier, je choisis la valeur du debut du segment que je veux modifier, et sa longueur. Puis j'utilise str_replace pour modifier ce segment, et substr_replace, enfin, pour remplacer le segment initial par le segment modifie.
Je ne connais pas grand chose 'a PHP 'a la base (en fait rien avant ce matin, si on peut dire, mais j'ai quand meme pas mal cherche), donc je m'excuse par avance si c'est une faute debile...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 $file="newStruct.xml"; $fichier = fopen($file,'r'); if ($fichier) { while (!feof($fichier)) //Tant que l'on est pas à la fin du fichier* { $buffer = fgets($fichier); //On lit la ligne courante if (strpbrk ($buffer, 'DESCRIPTION="') AND strpbrk ( $buffer , '"; XMLCOMMENT')) //si la ligne contient bien les elements (" ne fonctionne pas non plus) { echo "opopop"; // etrange, j'ai beaucoup trop de opopop $pos1=strpos ($buffer, 'DESCRIPTION="')+17; //pour le debut du segment 'a modifier $pos2=strpos ($buffer, '" XMLCOMMENT'-4); //fin du segment 'a modifier $length=$pos2-$pos1; $segmentInitial=substr($buffer, $pos1, $length); //on a le segment 'a modifier $segmentFinal=str_replace('"', ' ', $segmentInitial); //remplace les guillemets par rien $buffer=substr_replace($buffer, $segmentFinal, $pos1, $length); //remplace le segment initial par le segment final } } echo $buffer; fclose($fichier); //On ferme le fichier }
Merci d'avance!
Partager