parseur xml : contenu du tag coupé à chaque &
7 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
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 :
Et quand je le parse , j'obtiens ceci:
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 ?
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: Tout sélectionner
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<item>
<title>niveau4-1</title>
<link>Url-niveau4-1</link>
</item>
<item>
<title>niveau4-2 & 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: Tout sélectionner
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 ?
Oui désolé voila
- Code: Tout sélectionner
<?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);
?>
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.
SimpleXML quant à lui agrège peut-être de manière "automatique", je ne sais pas.
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 (& >...), 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]
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]
Bon pour m'en sortir dans le parser j'ai utilisé str_replace , j'ai fait ça:
Ensuite lorsque j'affiche , je fais l'opération inverse:
ce n'est pas très élégant , mais bon ça marche.
- Code: Tout sélectionner
while ( $ligneXML = fgets($fp, 1024))
{
$ligneXML=str_replace("&","|",$ligneXML);
xml_parse($parseurXML, $ligneXML, feof($fp)) or
die("Erreur XML");
}
Ensuite lorsque j'affiche , je fais l'opération inverse:
- Code: Tout sélectionner
if (($derniereBaliseRencontree=="TITLE")) {$texte=str_replace("|","&",$texte);echo "Titre = ";echo "<b>$texte</b>";echo"---- profondeur = ";echo $profondeur[$parseur];echo"<br>"; }
if (($derniereBaliseRencontree=="LINK")) {$texte=str_replace("|","&",$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.
7 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Google Enterprise a son blog
- Les informations de la Google Toolbar
- Yahoo Audio Search
- Indexation du Flash : Google sait gérer les XML/txt externes
- Le blog de Google Analytics
- Le blog officiel de Google Research
- Un (RSS) pour tous (les blogs officiels de Google)
- X-Robots-Tag : directive pour bloquer les robots dans l'entête HTTP : explications
- Le blog officiel de Google au Japon
- Le blog officiel de Google Custom Search (CSE)
Consultez la description détaillée des produits ou services de Google suivants : API Google Checkout
- Calcul du taux de liens profonds
Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
Qui est en ligne
Utilisateurs parcourant ce forum: mipc et 0 invités



le forum