Bonjour,
J'ai à ma disposition un flux de cette structure.
J'ai des problèmes pour lire les éléments en profondeurs. En effet comment distinguer les item category qui ont des profondeurs différentes ??
En général je lit mes fichiers xml avec cette fonction sans problème, mais j'ai toujours eu des fichiers sans profondeur.
J'utilise aussi ce code, mais la aussi je bloque pour naviguer en profondeur:
Comment faites-vous en général ??
Merci
J'ai à ma disposition un flux de cette structure.
Code:
<Categories>
<Country>FR</Country>
<Language>FrFr</Language>
<Category>
<Name>NOM1</Name>
<ID>1</ID>
<Url>URL1</Url>
<Category>
<Name>NOM2</Name>
<ID>5</ID>
<Url>URL2</Url>
<ProductCategory>
<Name>NOM3</Name>
<ID>6</ID>
<Url>URL3</Url>
</ProductCategory>
<ProductCategory>
<Name>NOM4</Name>
<ID>9</ID>
<Url>URL4</Url>
</ProductCategory>
</Category>
</Category>
</Categories>
J'ai des problèmes pour lire les éléments en profondeurs. En effet comment distinguer les item category qui ont des profondeurs différentes ??
En général je lit mes fichiers xml avec cette fonction sans problème, mais j'ai toujours eu des fichiers sans profondeur.
Code:
function lit_xml1($fichier,$item,$champs) {
if($chaine = @implode("",@file($fichier))) {
$tmp = preg_split("/<\/?".$item.">/",$chaine);
$nombre = sizeof($tmp);
for($i=1;$i<$nombre -1;$i+=2)
foreach($champs as $champ) {
$tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
$tmp3[$i-1][] = @$tmp2[1];
}
return $tmp3;
}
}
J'utilise aussi ce code, mais la aussi je bloque pour naviguer en profondeur:
Code:
<?php
$fichier = "fichier.xml";
// Ma propre fonction de traitement des balises ouvrantes
function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
{
// En fait... nous nous conteterons de mémoriser le nom de la balise
// afin d'en tenir compte dans la fonction "fonctionTexte"
global $derniereBaliseRencontree;
$derniereBaliseRencontree = $nomBalise;
}
// Ma propre fonction de traitement des balises fermantes
function fonctionBaliseFermante($parseur, $nomBalise)
{
// On oublie la dernière balise rencontrée
global $derniereBaliseRencontree;
$derniereBaliseRencontree = "";
}
// Ma propre fonction de traitement du texte
// qui est appelée par le "parseur"
function fonctionTexte($parseur, $texte)
{
global $derniereBaliseRencontree;
// Selon les cas, nous affichons le texte
// ou nous proposons un lien
// ATTENTION: Par défaut les noms des balises sont
// mises en majuscules
switch ($derniereBaliseRencontree) {
case "TITLE":
echo $texte;
break;
case "LINK":
echo ":<a href=\"$texte\">L'article complet</a><br />";
break;
}
}
// Création du parseur XML
$parseurXML = xml_parser_create();
// Je précise le nom des fonctions à appeler
// lorsque des balises ouvrantes ou fermantes sont rencontrées
xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante"
, "fonctionBaliseFermante");
// Je précise le nom de la fonction à appeler
// lorsque du texte est rencontré
xml_set_character_data_handler($parseurXML, "fonctionTexte");
// Ouverture du fichier
$fp = fopen($fichier, "r");
if (!$fp) die("Impossible d'ouvrir le fichier XML");
// Lecture ligne par ligne
while ( $ligneXML = fgets($fp, 1024)) {
// Analyse de la ligne
// REM: feof($fp) retourne TRUE s'il s'agit de la dernière
// ligne du fichier.
xml_parse($parseurXML, $ligneXML, feof($fp)) or
die("Erreur XML");
}
xml_parser_free($parseurXML);
fclose($fp);
?>
Comment faites-vous en général ??
Merci