PHPIndex : Utiliser PHP/MySQL pour récupérer du contenu XML
Par Auteur INTERNE, vendredi 13 octobre 2000 à 05:28 :: Lu sur le Web :: #698 :: rss
Introduction
XML est un moyen fantastique pour échanger des données. La structure en arbre des documents permet d'organiser, de 'stocker' puis d'utiliser des informations comme on le ferait habituellement avec une base de données relationelle.
Je vais vous proposer une solution trés utile pour 'parser' un document XML et remplir sa base de données sous MySQL.
Première partie : Analyse de la structure du document XML
Je prend l'exemple de la FAQ de PHPIndex en XML
<CHAPTER ID="1" title="Généralités"> <QUESTION ID="1.1">Qu'est-ce que PHP</QUESTION> <ANSWER>PHP est un langage de script. Ses nombreux atouts (code directement intégré aux pages HTML, richesse des fonctions, facilité de connexion à l'ensemble de SGBD du marché, etc.) en font une solution idéale pour le développement de sites Web dynamiques...</ANSWER> <QUESTION ID="1.4">Sur quelle architecture puis-je faire tourner PHP</QUESTION> <ANSWER>Unix ou NT.</ANSWER> <QUESTION ID="1.6">Qu'est ce qui le distingue de Perl</QUESTION> <ANSWER>L'approche est différente. De plus Perl existe depuis beaucoup plus longtemps que PHP. Il en résulte une importante base de connaissance (scripts, librairies et modules, documentations, etc.)...</ANSWER> </CHAPTER>On remarque plusieurs informations qui vont nous permettrent de réaliser le modèle conceptuel des données de la base. La balise
On va pouvoir réaliser deux tables : la première s'appelera 'chapter' et la seconde 'contenu'.
Soit le dictionnaire des données :
chapter (id, titre);
contenu (id, id_chapter, question, reponse);
'question' et 'reponse' sont des types TEXT, et 'titre' est un VARCHAR(255) ; 'id_chapter' prend pour valeur l'id de la table 'chapter' auquel la question est liée.
Deuxième Partie : Parser le document XML
Notre base et nos tables réalisées, le but maintenant est de récupérer le contenu du document XML pour l'insérer dans la base.
Pour cela il existe deux méthodes : la première est de parser grâce aux fonctions XML de PHP (voir article précédent), et la seconde est d'utiliser les expressions régulières PERL qui sont trés efficaces si on sait bien les utiliser.
Je ne reviendrais pas sur l'article précédent "Décomposer un document XML grâce à PHP" par contre je vais faire un petit topo sur les fonctions PCRE qu'offre PHP.
Remplissont la table chapter : pour cela j'ai besoin de récupérer tous les attributs title des balises chapter et de les insérer dans la table, utilisons la fonction preg_match_all().
$file = "faq.xml";
$contenu = fread(fopen($file, "r"), filesize($file));
preg_match_all("|<CHAPTER ID=\"\d\" title=\"(.*)\">|U", $contenu, $titre);
/* le \d signifie n'importe quelle décimale */
/* le .* signifie n'importe quel caractère '.' présent de 0 à n fois '*' */
Cette fonction remplie un tableau '$titre' contenant l'expression régulière trouvée entre les parenthèses.
for($j=0;$j<count($titre[1]);$j++){
$sql_query = "INSERT INTO chapter SET titre='".$titre[1][$j]."' ";
}
Vous avouerez que ce n'est pas si compliqué :))Conclusion
Cette procédure devient utile quand on doit récupérer le contenu d'une base sans les caractéristiques de chaque table (indices, index, clés etc...) ou si on veut sélectionner une partie seulement du contenu.
A la prochaine...
Consulter le lien






Commentaires
#1 - Le vendredi 27 avril 2007 à 17:44, par u115
#2 - Le samedi 19 mars 2011 à 00:56, par nanouss
Ajouter un commentaire
Vous pouvez soumettre un commentaire en remplissant le formulaire ci-dessous. Toutes les contributions font l'objet d'une étape de modération par notre équipe.
Le code HTML dans le commentaire sera affiché comme du texte, les adresses internet seront converties automatiquement.