|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 74 ![]() |
Bonjour à vous les amis, je cherche la bonne expression réguliere pour diminuer la taille d'un fichier xml qui est trop lourd pour pouvoir le parser.
J'ai deja essayé avec ce code qui marche pour une chaine de caractère en dure : Code :
Code :
Le probleme vient des guillements qui sont interpreté alors qu'il ne faudrait pas. Si quelqu'un de compétent dans les expressions régulière peut m'aider? Merci à vous tous. |
||||
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Inscription : mars 2006 Messages : 92 ![]() |
slt,
le pb , c'est la lecture de ton fichier. fopen retourne retourne un descripteur de fichier $fi=fopen('toto.txt'); $content=fread($fi,filesize ('toto.txt')); et ensuite tu appliques ton exp sur $content .. |
|
|
00
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 74 ![]() |
Merci pour ta réponse j'étais justement entrain de voir fread().
Par contre j'ai essayé le code : Code :
"Resource id #2" c'est tout. Toute les balises on disparu. Cela vient il toujours du fopen? |
||
|
|
00
|
|
|
#4 | |
|
Membre régulier
![]() Inscription : mars 2006 Messages : 92 ![]() |
attention !
Citation:
|
|
|
|
00
|
|
|
#5 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 74 ![]() |
Merci de ton aide Monsieurjean
Code :
Donc le eregi_replace ne marche pas et donc mon fichier n'est pas modifié... |
||
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
normal, le texte modifié est dans la variable $tmp dans ton exemple...
donc : Code :
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
||
|
|
00
|
|
|
#7 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 74 ![]() |
Merci de vos réponses j'arrive a obtenir une partie du fichier traité.
Mon code Code :
en fait il parse le fichier xml s'arrete quand il rencontre <amenities> (jusque la c'est normal) Il va jusqu'au bout du fichier trouve la derniere balise </amenities> et recommence a ecrire. alors que mon fichier xml est composé de plusieurs fichier.xml: <amenities>....</amenities> <amenities>....</amenities> <amenities>....</amenities> cela vient de l'expression réguliere j'ai essayé eregi_replace("^<amenities>(.*)</amenities>$",' ',$content); mais ca n'a pas fonctionné dans ce cas la il me recrit le fichier a l'identique |
||
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() ![]() Inscription : décembre 2003 Messages : 3 717 ![]() |
petite question bête ...
dans ce cas précis, ou tes partens à remplacer sont fixes, un simple str_replace ne serait_il pas plus simple ? |
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 74 ![]() |
Merci titoumimi pour ta réponse
ben j'utilise eregi pour pouvoir utiliser mon expression reguliere. Peut tu m'indiqué comment tu utiliserai str_replace à ma place? $tmp=str_replace($chaine,' ',$myFile); Que mettrai tu dans $chaine? Mon fichier xml ressemble à l'exemple que j'ai affiché sauf que c'est un extrait en réalité il fait 400 000 lignes |
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé
![]() ![]() Inscription : décembre 2003 Messages : 3 717 ![]() |
certes, ca demanderai d'en faire deux consécutifs
Code :
|
||
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 74 ![]() |
je veux supprimer les balises <amenities> mais aussi leur contenu c'est pour cela que j'utilise une expression reguliere. Moi aussi je m'y connais pas trop dans les regex.
J'ai pas compris le ? tu veux que je le met comment? comme ca? $temp=eregi_replace("<amenties>(.*)</?amenities>",' ',$content); je viens de tester $temp=eregi_replace("(<amenties>(.*)</?amenities>)*",' ',$content); pour dire que j'ai plusieur chaines de caracteres de type <amenities> ..... </amenities> mais ca marche pas ca fait comme au par avant ca séléctionne le premier <amenities> et ca va jusqu'au tout dernier </amenities> sans s'arreter Pourtant y a des </amenities>bien avant. Je comprend pas HELP |
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() ![]() Inscription : décembre 2003 Messages : 3 717 ![]() |
ahhh, pardon, je pensait que tu ne voulait supprimer que les balises elles même ...
Bon, je cours me cacher, toutes mes excuses alors
|
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
préfères les PCRE aux POSIX tu y gagneras en performances...
Code :
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
||
|
|
00
|
|
|
#14 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 74 ![]() |
Je viens de tester avec preg_replace avec différentes expression mais rien ne marche.
J'ai essayé : preg_replace('`<amenities>(.*)?</amenities>\n`','',$content); preg_replace('`<amenities>(.*)?</amenities>`','',$content); preg_replace('`<amenities>(.*)</amenities>`','',$content); preg_replace('`<amenities>.*</amenities>\n`','',$content); preg_replace('`<amenities>.*?</amenities>`','',$content); Toutes les balises <amenities> et leur contenu restent dans le fichier. De plus je ne pense pas que le \n soit necessaire car mon fichier xml ressemble à ca : <truc>tototot</truc><amenities> <amenity>hghfy</amenity> <amenity>hghfy</amenity> <amenity>hghfy</amenity> </amenities><description>ttotototototototo</description> <truc>tata</truc><amenities> <amenity>tititit</amenity> ... </amenities> je ne sais pas pourquoi preg_replace ne fonctionne pas. eregi_replace mais je dois avoir la mauvaise expression reg |
|
|
00
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2006 Messages : 74 ![]() |
Toujours bloqué
le probleme avec mon expression reguliere,c'est quel s'arrete pas a la bonne balise </amenities>, elle prend la toute derniere de mon fichier alors quel devrait prendre celle qui se trouve 20 lignes plus bas Mon expression reg '<amenities>(.*)?</amenities>' |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com