Problème de parseur en PHP 4

Petit nouveau ! | 1 Messages

26 déc. 2005, 19:39

Bonjour
Je cherche à parser un XML possèdant la structure suivante :
<BLOG>
<Article>
<Id></Id>
<Titre></Titre>
<Texte></Texte>
<IdEtat></IdEtat>
<Auteur></Auteur>
<comments>
<comment>
<Id></Id>
<Texte></Texte>
</comment>
</comments>
</Article>
<Article>
<Id></Id>
<Titre></Titre>
<Texte></Texte>
<IdEtat></IdEtat>
<Auteur></Auteur>
</Article>
</BLOG>

(tous les champs ne sont pas présents mais c'est histoire de simplifier l'affichage)

Mon but est de parcourir le XML pour qu'à chaque <Article>, j'associe une ligne dans un array (et à chaque champ, une colonne dans ce tableau).

A noter que je "désactive" certains champs dont je n'ai pas besoin.

Voici le code :

Code : Tout sélectionner

<?php $num_article=0; $articles=array(); function startHandler($xp, $name, $attribs) { global $IsOk; global $nomchamp; global $num_article; switch ($name) { case "TEXTE": $IsOk=1; break; case "ARTICLE": $num_article=$num_article+1; break; default: $IsOk=0; break; } } function endHandler($xp, $name) { // printf('handle end tag: %s<br />', $name); $IsOk=0; } function cdataHandler($xp, $cdata) { global $IsOk; global $nomchamp; global $num_article; global $articles; if ($IsOk==1) { if (isset($articles[$num_article][$nomchamp])) { $articles[$num_article][$nomchamp]=$articles[$num_article][$nomchamp]+$cdata; } else { $articles[$num_article][$nomchamp]=$cdata; } } } $file="test.xml"; $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startHandler", "endHandler"); xml_set_character_data_handler($xml_parser, "cdataHandler"); if (!($fp = fopen($file, "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); global $articles; foreach($articles as $champs) { foreach($champs as $valeurs) { echo "Le champ $valeurs a la valeur ".$valeurs; } } ?>
Mon souci est que le résultat affiché est incohérent (en effet, les champs <TEXTE> contiennent du texte au format HTML) (cf http://fetardalyon.sytes.net/xml2/test3.php

Si quelqu'un a une idée (ou un parseur plus performant), je suis preneur :)