Bonjour,
Je suis actuellement en train de réaliser un parser XML fonctionnant avec SAX pour gérer de l'évènementiel.
Le fichier XML fait plus de 70mega et je n'ai pas besoin de tout son contenu donc j'ai exclu SimpleXML et DOM.
Je suis confronté à un problème lors de la lecture de mon fichier.
J'ai plusieurs balises portant le même nom.
<resort>
<photo type="summer">a</photo>
<photo type="summer">b</photo>
<photo type="summer">c</photo>
<photo type="winter">d</photo>
<photo type="winter">e</photo>
</resort>
Lorsque j'essaye de les faire afficher en faisant un echo, tout s'affiche d'un seul coup comme ceci :
a b c d e
Je n'arrive pas à traiter ligne par ligne, j'ai essayé la boucle for et le foreach mais je n'ai pas réussi.
Dans le meilleur des cas je n'arrive qu'à trier en fonction de l'attribut type.
Voici un morceau de mon code :
$photo
="";
$tag
="";
$insideresort
=false;
function startElement($parser, $name, $attrs)
{
//fonction1 global $tag, $photo, $insideresort;
if ($insideresort)
{
//début $tag
= $name;
}
//fin else if($name
=="RESORT")
{
//début $insideresort
=true;
}
//fin}
//fin fonction1function endElement($parser, $name)
{
//début fonction2 global $tag, $photo, $insideresort;
echo $Photo;
$photo
="";
$tag
="";
$insideresort
=false;
}
//fin fonction2function characterData($parser, $data)
{
//Début fonction3global $tag, $photo, $insideresort;
if($insideresort
==true)
{
//début if switch($tag)
{
//Début switch case(
"PHOTO"):
$Photo
.=$data;
break;
}
//Fin switch }
//Fin if}
//Fin fonction3$xml_parser
=xml_parser_create();
xml_set_element_handler($xml_parser,
"startElement",
"endElement");
xml_set_character_data_handler($xml_parser,
"characterData");
$file
="mon.xml";
if (!($fp
=fopen($file,
"r"))) {
die(
"Erreur : impossible d'ouvrir le fichier.");
}
while ($data
= fread($fp, 4096))
{
xml_parse($xml_parser, $data,
feof($fp))
or die(sprintf(
"XML error: %s at line %d",
xml_error_string(
xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
fclose($fp);
xml_parser_free($xml_parser);
Voici, donc si vous avez une idée pour palier mon problème, ce serait bien, j'imagine qu'il doit exister une solution, mais je cherche depuis bientôt plus de deux jours et je bloque...
NIRVANA is never enough ! It's in the spirit !