Formation par Olivier Duffez

Formation au référencement par Olivier Duffez, créateur de WebRankInfo !
Une formule efficace alliant théorie et pratique, avec une haute disponibilité des intervenants
Cette formule a déjà convaincu plusieurs centaines d'entreprises, pourquoi pas vous ?
Réservez vite votre place en ligne (convention possible pour imputer sur le budget formation)

Formation référencement Marseille

parseur xml : contenu du tag coupé à chaque &

Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
seabird
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Déc 2003
Messages: 190

URL permanente de ce messagePosté le : Mer Juin 04, 2008 14:46    Sujet du message: parseur xml : contenu du tag coupé à chaque &

Bonjour,

J'ai un petit soucis lorsque je parse mon xml à chaque apparition de &.
Dès que le parseur rencontre la symbole & dans un tag , il s'arrête et passe au tag suivant

Par exemple ici j'affiche la valeur de title et link avec la profondeur correspondante. Tout se passe bien s'il n'y a pas de "&" dans le xml. Par contre dès qu'il y en a un , voila ce que j'obtiens.
J'ai le fichier test.xml suivant dans lequel j'ai mis amp; dans le titre 4-2 :
Code:

<?xml version="1.0"?>
<rss version="2.0">
  <channel>
   <item>
      <title>niveau4-1</title>
      <link>Url-niveau4-1</link>
   </item>
    <item>
      <title>niveau4-2 &amp; essai </title>
      <link>Url-niveau4-2</link>      
      <item>
         <title>niveau5-1</title>
         <link>Url-niveau5-1</link>      
         <item>
            <title>niveau6-1</title>
            <link>Url-niveau6-1</link>
         </item>            
      </item>         
      <group>
         <title>niveau5-2</title>
         <link>Url-niveau5-2</link>      
         <propri>
            <title>niveau6-2</title>
            <link>Url-niveau6-2</link>
         </propri>            
      </group>         
   </item>           
  </channel>
</rss> 


Et quand je le parse , j'obtiens ceci:

Code:

Titre = niveau4-1---- profondeur = 4
Lien = Url-niveau4-1---- profondeur = 4

Titre = niveau4-2 ---- profondeur = 4
Titre = &---- profondeur = 4
Titre = essai ---- profondeur = 4
Lien = Url-niveau4-2---- profondeur = 4

Titre = niveau5-1---- profondeur = 5
Lien = Url-niveau5-1---- profondeur = 5

Titre = niveau6-1---- profondeur = 6
Lien = Url-niveau6-1---- profondeur = 6

Titre = niveau5-2---- profondeur = 5
Lien = Url-niveau5-2---- profondeur = 5

Titre = niveau6-2---- profondeur = 6
Lien = Url-niveau6-2---- profondeur = 6


On voit que le titre est coupé au niveau du &.

je pense qu'il doit y avoir un problème de codage quelque part.
Vous voyez comment m'en sortir . Pourquoi donc le parser fait comme si le & était la balise fermante ?
 
seabird Visiter le site web du posteur
jcaron
WRInaute impliqué
WRInaute impliqué

Inscrit le: 13 Fév 2004
Messages: 496
Localisation: Paris

URL permanente de ce messagePosté le : Mer Juin 04, 2008 14:56    Sujet du message: parseur xml : contenu du tag coupé à chaque &

Si tu ne nous dis même pas ce que tu utilises pour parser ton XML, et comment, c'est sûr, on risque de t'aider énormément.

Jacques.
 
jcaron Visiter le site web du posteur
seabird
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Déc 2003
Messages: 190

URL permanente de ce messagePosté le : Mer Juin 04, 2008 15:06    Sujet du message: parseur xml : contenu du tag coupé à chaque &

Oui désolé voila Confused
Code:

<?php

$profondeur = array();
$fichier = "essai.xml";

    function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
      {

        global $derniereBaliseRencontree;
        $derniereBaliseRencontree = $nomBalise;
     
      global $profondeur;     
      $profondeur[$parseur]++;

     
      }
   

    function fonctionBaliseFermante($parseur, $nomBalise)
      {

        global $derniereBaliseRencontree;
        $derniereBaliseRencontree = "";
        global $profondeur;

      $profondeur[$parseur]--;
 
     
      }

    
    function fonctionTexte($parseur, $texte)
    {
        global $derniereBaliseRencontree;
        global $profondeur;

if (($derniereBaliseRencontree=="TITLE")) {echo "Titre = ";echo "<b>$texte</b>";echo"---- profondeur = ";echo $profondeur[$parseur];echo"<br>";  }
if (($derniereBaliseRencontree=="LINK")) {echo "Lien = ";echo "<b>$texte</b>";echo"---- profondeur = ";echo $profondeur[$parseur];echo"<br><br>";  }
     
    }


    $parseurXML = xml_parser_create();

    xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante", "fonctionBaliseFermante");

   xml_set_character_data_handler($parseurXML, "fonctionTexte");
   
    $fp = fopen($fichier, "r");
    if (!$fp) die("Impossible d'ouvrir le fichier XML");


    while ( $ligneXML = fgets($fp, 1024))
      {

        xml_parse($parseurXML, $ligneXML, feof($fp)) or
            die("Erreur XML");
      }
   
    xml_parser_free($parseurXML);
    fclose($fp);

?>
 
seabird Visiter le site web du posteur
Bool
WRInaute passionné
WRInaute passionné

Inscrit le: 26 Fév 2004
Messages: 979
Localisation: Lyon

URL permanente de ce messagePosté le : Mer Juin 04, 2008 15:16    Sujet du message: parseur xml : contenu du tag coupé à chaque &

C'est le fonctionnement "normal" de xml_parser, et je pense que XMLReader en fait autant également. A toi de ne traiter les "data" qu'une fois la balise courante fermée.

SimpleXML quant à lui agrège peut-être de manière "automatique", je ne sais pas.
 
Bool Visiter le site web du posteur
seabird
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Déc 2003
Messages: 190

URL permanente de ce messagePosté le : Mer Juin 04, 2008 15:33    Sujet du message: parseur xml : contenu du tag coupé à chaque &

Bon je vais y réfléchir...

Dernière édition par seabird le Mer Juin 04, 2008 16:11; édité 1 fois
 
seabird Visiter le site web du posteur
jcaron
WRInaute impliqué
WRInaute impliqué

Inscrit le: 13 Fév 2004
Messages: 496
Localisation: Paris

URL permanente de ce messagePosté le : Mer Juin 04, 2008 15:34    Sujet du message: parseur xml : contenu du tag coupé à chaque &

Oui, c'est assez normal, la plupart des parsers XML ne garantissent pas qu'un bout de texte (entre deux tags) soit délivré "d'un seul coup". Le cas le plus classique ce sont les entités (&amp; &gt...), mais ça pourrait arriver dans d'autre cas de figure (par exemple si tu fournis le XML par blocs).

Il convient toujours dans le handler de texte d'accumuler ce qui est reçu, et de ne faire le traitement que lorsque la balise est fermée.

Jacques.

[grilled]
 
jcaron Visiter le site web du posteur
seabird
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Déc 2003
Messages: 190

URL permanente de ce messagePosté le : Mer Juin 04, 2008 16:11    Sujet du message: parseur xml : contenu du tag coupé à chaque &

Bon pour m'en sortir dans le parser j'ai utilisé str_replace , j'ai fait ça:
Code:

  while ( $ligneXML = fgets($fp, 1024))
      {
       $ligneXML=str_replace("&amp;","|",$ligneXML);
        xml_parse($parseurXML, $ligneXML, feof($fp)) or
            die("Erreur XML");
      }


Ensuite lorsque j'affiche , je fais l'opération inverse:
Code:

if (($derniereBaliseRencontree=="TITLE")) {$texte=str_replace("|","&amp;",$texte);echo "Titre = ";echo "<b>$texte</b>";echo"---- profondeur = ";echo $profondeur[$parseur];echo"<br>";  }
if (($derniereBaliseRencontree=="LINK")) {$texte=str_replace("|","&amp;",$texte);echo "Lien = ";echo "<b>$texte</b>";echo"---- profondeur = ";echo $profondeur[$parseur];echo"<br><br>";  }


ce n'est pas très élégant , mais bon ça marche. Very Happy
 
seabird Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

Définitions :

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort