url dans fichier xml découpé en 3 partie, pourquoi ?

url dans fichier xml découpé en 3 partie, pourquoi ? - PHP - Programmation

Marsh Posté le 14-09-2004 à 10:26:02    

Bonjour, en m'inspirant du tutorial trouvé sur phpfrance j'essaie de créer moi même mon propre parser.  
Seulement sur les attributs du type url avec parametre (pas les autres attributs qui fonctionne tres bien) j'ai un probleme. L'url se retrouve decoupée en 3 morceaux. (je ne comprend pas pourquoi)
 
Voici l'url telle qu'elle ecrite dans le fichier xml:  


Et elle se retrouve découpé en 3 moceaux comme ci le parser la lisait en 3 fois ou comme ci c'etais 3 elements différent:  

Citation :

http://www.nimportequoi.com/index.php?area=news  
&  
id=109460132630907800


 
Pouvez m'expliquer pourquoi elle se retrouve découpée en 3 ? Et eventuellement le moyen de résoudre ce probleme, merci.
 
Voici un exemple de mon probleme que j'ai simplifié et qui fonctionne si vous voulez le tester.  
 
la page contenant le parser :  
 

Code :
  1. <html>
  2. <?php
  3. function ouvre ($parser, $name, $attrs){
  4. global $DANS_LINK ;
  5. global $link ;
  6. if ($name == "LINK" ){
  7. $DANS_LINK = TRUE ;
  8. }
  9. }
  10. function ferme ($parser, $name){
  11. global $DANS_LINK ;
  12. global $link ;
  13. if ($name == "LINK" ){
  14. print("<b>".$link."</b><br>\n" );
  15. $DANS_LINK = FALSE ;
  16. }
  17. }
  18. function texte ($parser, $data_text){
  19. global $DANS_ITEM ;
  20. global $DANS_LINK ;
  21. global $link ;
  22. if ($DANS_LINK) {
  23. echo( $data_text );
  24. print (($link)."<br>\n" );
  25. }
  26. }
  27. function default_f(){
  28. return TRUE;
  29. }
  30. $xml_parser = xml_parser_create();
  31. xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
  32. xml_set_element_handler($xml_parser, "ouvre", "ferme" );
  33. xml_set_default_handler($xml_parser,"default_f" );
  34. xml_set_character_data_handler($xml_parser, "texte" );
  35. if(!($fp = @fopen("rss2.xml", "r" ))){
  36. die("<B>Impossible de Trouver le fichier. Fin d'execution</B>" );
  37. }
  38. while ($data = fread($fp, 4096)){
  39. if(!xml_parse($xml_parser, $data, feof($fp))){
  40. die(sprintf("Erreur XML : %s a la ligne %d",
  41. xml_error_string(xml_get_error_code($xml_parser)),
  42. xml_get_current_line_number($xml_parser)));
  43. }
  44. }
  45. xml_parser_free($xml_parser);
  46. ?>
  47. </html>

 
 
 
le fichier Xml rss2.xml
 

Code :
  1. <?xml version="1.0" ?>
  2. <infos>
  3. <item>
  4. <link>http://www.nimportequoi.com/index.php?area=news&amp;id=109460132630907800</link>
  5. </item>
  6. <item>
  7. <link>http://www.nimportequoi.com/index.php?area=news&amp;id=109458649790125600</link>
  8. </item>
  9. <item>
  10. <link>http://www.nimportequoi.com/index.php?area=news&amp;id=109416553474586500</link>
  11. </item>
  12. <item>
  13. <link>http://www.nimportequoi.com/index.php?area=news&amp;id=109400056623116000</link>
  14. </item>
  15. </infos>

 
 
 
Merci de vos explications. Je ne veux pas utiliser la méthode DOM car ce n'est que de la lecture donc SAX s'impose. Pour moi c'est un peu comme une initiation au xml j'essairai DOM plustard quand je maitriserai deja la méthode SAX.

Reply

Marsh Posté le 14-09-2004 à 10:26:02   

Reply

Marsh Posté le 04-10-2004 à 14:48:20    

parce que & est un caractère spéciale...
dans les données xml tu doit remplacer & par &amp;
 
D'autant que &amp; est un bon séparator de variable (et je crois que c'est le seul qui est valid html 4 strict)
 
moi j'utilise cette petit fonction pour remplir les données de mon xml :
 

Code :
  1. function replaceXmlEntities($string)
  2.   {
  3.     return strtr( $string, array(
  4.                                   '&'  => '&amp;',
  5.                                   '>'  => '&gt;',
  6.                                   '<'  => '&lt;',
  7.                                   '"'  => '&quot;',
  8.                                   '\'' => '&apos;' ));
  9.   }

Reply

Marsh Posté le 04-10-2004 à 14:50:25    

cela dit, j'ai le meme souci... avec les &...;
 
dans un champ, j'ai ca comme donnée :
<data>c&apos;est la vie</data>
 
et il me découpe ca en trois aussi :
1->c
2->'
3->est la vie
 
on m'a dit qu'il fallait passer une option au parser pour pas qu'il fasse ca, mais j'ai pas encore trouver (c pourquoi je suis sur le forum ;)

Reply

Marsh Posté le 04-10-2004 à 14:58:28    

arf, j'avais pas vu tes données xml avec le &amp;
 
Sinon, ca marche correctement pour moi quand c'est une apostrophe simple... donc je crois que je vais pas m'emerder... je vais remplacer &amp; par ' et ca ira bien...

Reply

Sujets relatifs:

Leave a Replay

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