J'ai bidouillé le truc pour faire ce que je veux (en faire un tableau HTML);
Le truc fonctionne trés bien sous easyPHP mais il ne se passe plus rien dés que je suis en ligne.
j'ai fait des petits phpinfos et je suis en php5 sur mon serveur et 4.7.3.1 sur easy...
Sur les deux, j'ai le m^me expat et XML est bien activé partout...
je vous mets le code de ma page :
<?php
$fichier=$_POST['xmlImprimer'];
function decoder($texte){
$texte = str_replace(">", ">", $texte);
$texte = str_replace("<", "<", $texte);
$texte = str_replace("%2D", "-", $texte);
$texte = str_replace("%20", " ", $texte);
return $texte;
}
class xml {
var $parser;
function xml() // constructor
{
$this->parser = xml_parser_create();
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, "tag_open", "tag_close");
}
function tag_open($parser, $tag, $attributes) {
if ($tag != "RACINE" && $attributes["NOM"]!= "") {
echo " <br/> balise ouvrante";
echo " <td>IMAGE</td>
<td align='center' valign='middle'>".decoder($attributes['NOM'])."</td>
<td align='center' valign='middle' bgcolor='#F5F7EE'>prix €</td>
<td align='center' valign='middle'>".$attributes["QUANTITE"]."</td>
<td align='center' valign='middle' bgcolor='#F5F7EE'>produit €</td></tr>
<tr>
<td colspan='5'><img src='file:///G|/EasyPHP1-7/www/atribu/images/trait.gif' width='100%' height='2'></td>
</tr>";
}else {
echo "<br/> balise non valide";
}
}
function tag_close($parser, $tag)
{
echo "... fermée";
}
function parse($data)
{
echo "debut du parse";
xml_parse($this->parser, $data);
}
} // end of class xml
echo "
<body>
<div align='center'>
<table width='532' border='0'>
<tr align='center' bgcolor='#DCE1C1'>
<td width='80' class='Style1'>photo</td>
<td width='235' bgcolor='#DEE3C6' class='Style1'>nom</td>
<td width='65' class='Style1'>prix</td>
<td width='65' class='Style1'>Quantité</td>
<td width='65' class='Style1'>total</td>
</tr>
<tr>
<td colspan='5'><img src='trait.gif' width='100%' height='2'></td>
</tr>
<tr> ";
$xml_parser = new xml(); // creation of the objet
$xml_parser->parse("$fichier");
echo "</table>";
?>
grace aux petits echos : "balise non valides", "balise ouvrante", "... fermée", je vois mieux ce qui se passe :
Avec mon serveur local, ça me retourne :
- debut du parse
- balise non valide
- balise non valide ... fermée
- balise ouvrante ... fermée
- balise ouvrante ... fermée
- ... fermée
normal, quoi...
mais dés que le script est en ligne, j'ai (pour un XML identique) :
- debut du parse
- balise non valide
Et c'est tout !
Donc ce n'est pas un probléme de récupérer le XML, il s'arréte aprés le tag <RACINE>...
Pourquoi ?
Vraiment, je ne vois pas.
Je tiens à dire que le XML est construit avec un premier noeud vide qui contient tout les attribut utiles mais vide qui a été cloné puis "rempli" sous flash. C'est ce qui explique la condition un peu particuliere :
if ($tag != "RACINE" && $attributes["NOM"]!= "") {
...
Si je la transforme un peu pour qu'il ignore seulement la racine mais pas ce noeud vide, le résultat est le même.si je retire carrement la condition, il dessine une première ligne du tableau (pour le tag racine...) mais ne peut rien remplir et s'arréte.
Bref, je ne sais pas ce qui coince mais ça coince partout, sauf en local...
Pour ceux que ça intéresse, j'ai fait un petit ZIP avec une version simplifiée à l'extréme du probléme.
Vous le trouverez derriere ce lien
il y a dedans, un swf qui envoie a une version nettoyée de ma page PHP le XML qu'il load de puis un fichier (vous pouvez donc le voir aussi...)
voila, j'aimerai vraiment qu'on m'aide, je bloque sur un truc que je croyait fini depuis longtemps et c'est vraiment...
](*,)