par
Invité » 12 sept. 2006, 15:50
Bonjour,
j'essaye de parser un fichier XML pour l'integrer dans ma base de donner par la suite. J'ai trouver un tutorial la dessus mais je suis un peu perdu aux niveaux des balise XML et faire le lien avec PHP.
Voici le code utilise :
$fichier = "http://www.communicate.vg/prnewswire/1431287.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 "P":
echo $texte;
break;
case "P":
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);
Dans mon fichier XML, j'ai un element <BLOCK> dans lequel se trouve plusieurs element <P> qui forme le texte.
Le probleme c'est que je n'arrive pas a sortir uniquement l'element <BODY> donc le texte avec les saut de ligne (balise P). Il ne me prend juste que les balise P et donc qund je veux l'inserer dans la base il ne m'integre qu'ine balise P sur un champ et ainsi de suite au lieu de les regrouper pour en former un champ complet.
Pas tres clair hein!!!
j'ai un peu de mal a m'y retrouver mais j'essaye d'avancer si jamais vous aviez une petite lumiere a suivre..
Bonjour,
j'essaye de parser un fichier XML pour l'integrer dans ma base de donner par la suite. J'ai trouver un tutorial la dessus mais je suis un peu perdu aux niveaux des balise XML et faire le lien avec PHP.
Voici le code utilise :
[php]
$fichier = "http://www.communicate.vg/prnewswire/1431287.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 "P":
echo $texte;
break;
case "P":
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);[/php]
Dans mon fichier XML, j'ai un element <BLOCK> dans lequel se trouve plusieurs element <P> qui forme le texte.
Le probleme c'est que je n'arrive pas a sortir uniquement l'element <BODY> donc le texte avec les saut de ligne (balise P). Il ne me prend juste que les balise P et donc qund je veux l'inserer dans la base il ne m'integre qu'ine balise P sur un champ et ainsi de suite au lieu de les regrouper pour en former un champ complet.
Pas tres clair hein!!!
j'ai un peu de mal a m'y retrouver mais j'essaye d'avancer si jamais vous aviez une petite lumiere a suivre..