[PHP] Analyse d'un fichier XML: confusion balises xml/html

Analyse d'un fichier XML: confusion balises xml/html [PHP] - PHP - Programmation

Marsh Posté le 01-01-2007 à 23:01:10    

:hello:
 
J'ai besoin de parser des fichiers XML pour remplir une base de données mysql.
Dans mon fichier XML j'ai une balise qui peut contenir jusqu'à quelques phrases avec parfois du html introduit...

Code :
  1. <EventText>
  2. À la 14e minute, <a href="PlayerDetails.asp?playerID=56081022">Marc  Jaeger</a> de FCGB s'écroula à la limite de la surface de réparation. L'arbitre donna toutefois un carton jaune à <a href="PlayerDetails.asp?playerID=56081022">Marc  Jaeger</a> pour simulation.&nbsp;
  3. </EventText>

 
 
Voilà comment je m'y prend pour parser en php:
 

Code :
  1. function startElement($analyseur, $nom_element, $tab_attributs) { // je met à vrai une variable en fonction de $nom_element}
  2. function characterData($analyseur, $data) { // selon la balise ouverte je construit mes requêtes}
  3. function endElement($analyseur, $nom_element) { // rien pour le moment}
  4. $parser = xml_parser_create();
  5. xml_set_element_handler($parser, "startElement", "endElement" );
  6. xml_set_character_data_handler($parser, "characterData" );
  7. $filehandler = fopen($isoFile, "r" );
  8. while($data = fread($filehandler, 4096)){
  9.   xml_parse($parser, $data, feof($filehandler));
  10. }
  11. fclose($filehandler);
  12. xml_parser_free($parser);


Depuis la fonction characterData je travaille avec la variable $data. Seulement dans le cas où le texte contient des balises HTML, la variable ne contient pas intégralement le texte entre les balises <EventText> et </EventText> par exemple. Dans l'exemple donné, j'obtiens "À la 14e minute, " et rien de plus.
 
Comment pourrais-je faire pour obtenir tout le texte entre mes deux balises XML et ignorer les éventuelles balises HTML ?


Message édité par Pwill le 01-01-2007 à 23:01:58
Reply

Marsh Posté le 01-01-2007 à 23:01:10   

Reply

Marsh Posté le 01-01-2007 à 23:32:15    

C'est ton XML qui est foireux. Si tu veux introduire, au sein d'une balise, un texte libre qui ne doit pas être interprété comme du XML, tu dois echapper proprement tes tags en les remplaçant par &lt; et &gt;


Message édité par gizmo le 01-01-2007 à 23:34:08
Reply

Marsh Posté le 02-01-2007 à 10:46:08    

Ah mince ! Et ca j'y peux rien, je bricole à partir du xml que fournit un site et ils ont stoppé le support pour les développeurs. Merci pour la précision.
 
Une idée tout de même... si je traite la balise HTML comme une balise XML, je dois pouvoir récupérer le texte entre mes deux balises (le texte d'un lien dans l'exemple).  
Est-ce que vous voyez  un moyen de récupérer le texte entre les balises </a> et </EventText> ? Ce bout de texte ne sera jamais dans le $data de ma fonction characterData, je me trompe ?

Reply

Marsh Posté le 02-01-2007 à 11:07:13    

Quelle version de PHP ?

Reply

Marsh Posté le 02-01-2007 à 11:29:05    

C'est du php 4.3.10 parce que je ne me suis pas fatigué, j'ai installé EasyPHP 1.8 [:amandine75011]
Je peux toujours tester la version beta 1 de EasyPHP 2 s'il faut du php 5 :D

Reply

Marsh Posté le 02-01-2007 à 11:32:19    

Ou passer à wampserver pour du 5...

Reply

Marsh Posté le 02-01-2007 à 11:56:06    

Euh oui pourquoi pas, je ne connais pas wampserver, je vais jetter un oeil :)
 
Cela dit, mon bricolage, ce n'est qu'un tout petit script qui ne fonctionne qu'en local et je n'ai pas spécialement envie de m'embêter en ce moment.  
Ma moulinette maison... il faudra que je la ré implémente lorsque le support développeur (ce qui permet de récupérer les données proprement en toute légalité) du site sera à nouveaux ouvert. Je ne sais pas quand, ni dans quelles circonstances...  
Donc je n'ai pour le moment pas accès aux données via requêtes sur le serveur.
 
C'est du bricolage pour patienter car, depuis le site en question, j'affiche (quand c'est possible) du XML via mon navigateur que j'enregistre à la main.  
Ceci pour récupérer la 1ère partie des données qui m'intéressent, et je récupère la 2nde partie (indispensable) via du copier coller de texte car elle n'est pas disponible sous forme XML...
 
Bref, j'attends de voir comment se présenteront les données avant de me lancer dans une implémentation sérieuse.
 
Pour en revenir à php5, quelle est l'idée qui t'amène à me faire passer à cette version ? Il y aurait un moyen de régler le problème rencontré?

Reply

Marsh Posté le 02-01-2007 à 11:58:30    

C'est que l'API DOM est super [:dawak]

Reply

Marsh Posté le 02-01-2007 à 12:29:42    

C'est ok pour wampserver et l'API DOM. Ca me semble plus compliqué que l'API SAX mais l'investissement ne devrait pas être perdu, merci pour les infos :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed