Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour,
j'ai un fichier XML (extrait):
et un fichier .php qui devrait pouvoir supprimer le bloc <row><string>MQCD.1... </row>
avec une variante : supprimer les blocs <row><string>MQCD.0... </row> et <row><string>MQCD.2... </row>
ou autres...
la regex utilisée : (un test pour commencer, devrait supprimer tous les blocs <row>)
Mais rien ne se passe, même pas une erreur (avec error_reporting(E_ALL); )
j'ai bien évidement essayé plusieurs pattern, mais celui ci-dessus me semble le plus proche du pattern final... celui qui va fonctionner ;)
un autre test consistait à faire :
et ici, il m'a bien supprimé de MQCD.1 à la dernière balise </row> du XML
Je suis complètement perdu avec les métacaractères, symboles, ancres, classes... plus je cherche, plus je m'y perds :(
Si quelqu'un pouvait me mettre sur la voie afin que je puisse comprendre le comportement de ce preg_replace et en particulier celui du patern, ce serait sympa.
PS : Un fichier xml complet : http://pastebin.com/m5e06c5bc
Hors ligne
Hello,
Passer par une regexp pour faire ce genre de tâche peut poser de sérieux problèmes (Tu sais pas trop ce qu'il peut y avoir dans ton fichier XML au fil du temps, il est possible que ton MQCD soit changé pour autre chose...)
Renseigne plutôt sur la librairie SimpleXML native à PHP, il y a une petite fonction qui s'appelle : simplexml_load_file() qui te permet de transformer un fichier XML en objet et de le manipuler par la suite...
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Salut Maskime,
Le contenu du fichier XML est généré par moi même. C'est en fait un fichier .php généré par un autre fichier.
Je m'explique :
cron.php génère ./xml/2009-11-02.php qui au final contient :
et dans index.php, j'appelle le fichier ./xml/2009-11-02.php?paramOptionnel=val qui retourne du xml propre (j'utilise en fait ça → http://www.maani.us/xml_charts/ )
J'ai donc fait un test dans un fichier vierge :
et l'erreur qui apparait :
Warning: simplexml_load_file() [function.simplexml-load-file]: <row> in /home/****/charts2/test.php on line 3
Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home/****/charts2/test.php on line 3
et si je l'appelle avec le paramètre optionnel, il ne trouve pas le fichier
Voilà, ça fait beaucoup de fichier.php include les uns dans les autres... sans doute l'origine de l'erreur.
Pour en revenir à ta remarque « il est possible que ton MQCD soit changé pour autre chose... », je te répondrai qu'il y a de forte chances que non. Sinon, faudrait changer le nom de domaine, le nom du clan (FPS), les serveurs de jeux... autrement dit le clan serait dissout ! et le script ne servirait plus à rien.
Donc aujourd'hui, même si ce n'est pas très propre/sécurisé/pro, je pense rester sur ma première idée : utiliser cette regex, et j'en aurai quasiment fini avec ce script
Sauf si tu arrives à me convaincre de changer mon point de vue...
Dernière modification par cramj (02-11-2009 18:21:06)
Hors ligne
Peut-être un début de piste avec simplexml_load_string
ob_end_clean();
$xml = simplexml_load_string($ob);
print_r($xml);
} else {
exit('Echec lors de l\'ouverture du fichier test.xml.');
}
?>
mais je n'arrive pas stocker la bonne chaine dans $ob
Warning: simplexml_load_string() [function.simplexml-load-string]: <row> in /home/***/charts2/test.php on line 11
Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in /home/***/charts2/test.php on line 11
Hors ligne
À force d'y aller à tâtons et épluchant les explemples par ci par là, j'ai fini par trouver. Mais voilà le temps passé pour si peu
$get_fichier = preg_replace('#<row>
<string>MQCD.1(.*)</row>#sUi' , '', $get_fichier);
{édit} Je n'ai pas trouvé comment éditer le titre de ce fil afin d'ajouter « Résolu »
Dernière modification par cramj (03-11-2009 01:17:08)
Hors ligne
Pages :: 1