[RESOLU] Recherche dans un fichier XML

bobby
Invité n'ayant pas de compte PHPfrance

11 juil. 2010, 19:55

Bonjour,

Je dispose de plusieurs fichiers XML, qui sont des catalogues de produits. Je souhaite créer un moteur de recherche, en utilisant ces fichiers comme base de données, afin qu'un utilisateur puisse rechercher le produit qu'il souhaite (recherche multi balises).

Quelle est le meilleur moyen de réaliser ce moteur de recherche en PHP : xpath, SAX, ou autre méthode ?
Où puis-je trouver des exemples d'implémentation similaires ?

Merci par avance.

ViPHP
ViPHP | 5462 Messages

12 juil. 2010, 00:10

ce dépend de la forme des données et du type de recherche (libre, par critères...), et surtout de la taille des XML

bobby
Invité n'ayant pas de compte PHPfrance

12 juil. 2010, 15:16

J'ai des fichiers XML assez volumineux (jusque 10Mo) et je veux faire une recherche qui mix recherche libre et recherche par critère. Voici un exemple de fichier XML :

<?xml version="1.0" encoding="UTF-8"?>
<produits>
<produit>
<trademark>Renault</trademark>
<title>Renault Clio TDI 95 CV</title>
<desc>Renault Clio 5 portes gris metalisé</desc>
<full_desc/>
<url><![CDATA[http://www.toto.com]]></url>
<other/>
<price currency="EUR">14099</price>
<tax>
<name/>
<price currency="EUR"/>
</tax>
<shipping>
<delivery>Livrable au plus tard le 26/10/2010</delivery>
<price currency="EUR"/>
</shipping>
<category>
<merchant>
<name>Clio</name>
<id/>
</merchant>
</category>
<storeData>
<data type="Modele">TDI 95CV</data>
<data type="Carburant">Diesel</data>
<data type="Prix catalogue">18999.00</data>
<data type="Reduction pourcentage">13.5</data>
<data type="Reduction montant">4900</data>
<data type="Emission CO2">135 g/km</data>
<data type="motorisation" unit="cm 3">95 ch</data>
<data type="nbportes">5</data>
<data type="boite">Automatique</data>
<data type="Coloris">Sur mesure</data>
</storeData>
</produit>
</produits>

Je dois pouvoir faire une recherche libre sur <trademark>, <title>, <desc> et sur les <data type>.
Je dois aussi pouvoir faire une recherche sur critère (Essence/diesel, nombre de portes...) sur les <data type>

J'avais commencé en utilisant xpath/xquery, mais je suis confronté à plusieurs problèmes :
- je n'ai pas trouvé le moyen de faire une recherche qui matche le contenu partiel d'une balise (par exemple une recherche sur "clio" dans la balise <title> doit matcher, actuellement cela ne matche que lorsque je recherche le contenu exact "Renault Clio TDI 95 CV" )
- les requètes sont sensibles à la casse
- difficulté de rechercher dans des balises situées à des niveaux différents dans l'arborescence

Merci par avance pour vos compléments de réponses.

ViPHP
ViPHP | 5462 Messages

12 juil. 2010, 15:19

pour recherche du contenu c'est avec contains() :wink:

Eléphant du PHP | 422 Messages

12 juil. 2010, 15:48

bonjour

moi je mettrais les fichier en db et je ferais les recherches dans la db.

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)