Bonjour,
Actuellement j'ai un fichier xml que je met en forme avec du xsl.
Maintenant je voudrais créer un moteur de recherche sur ce fichier xml en gardant la mise en page instaurer par le xsl.

Les recherches se feraient soit :
- sur un champs texte à remplir et à chercher dans chaque noeud
- sur une sélection d'un élément dans une liste déroulante correspondant au contenu d'un noeud

Est ce que quelqu'un pourrait m'orienter sur l'outil à utiliser, ou des exemple d'implémentation d'un moteur de recherche d'un un fichier xml ?
Enfaite l'idée est de rendre dynamique l'affichage du fichiers xml en affichant uniquement les noeuds correspondant à la recherche...
Modérateur
Salut,

XPath dispose de la méthode "contains", permettant de discerner n'importe quelle chaine de caractères au sein d'un nœud. Pour voir comment t'en servir, tu peux, par exemple, consulter ce document.
J'ai essayé la méthode "contains" de cette manière :

$recherche =$xml->xpath("//Categories/Categorie/Familles/Famille/Figures/Figure[contains(.,'1132']");


et cela m'affiche le message d'erreur : Warning: SimpleXMLElement::xpath() [simplexmlelement.xpath]: Invalid expression in C:\wamp\www\comap XML\recherche.php on line 166

ou est mon erreur ?
Modérateur
mmh... Là, comme çà, à vue de nez, je dirais dans la chaine de caractères de la ligne 166 du fichier recherche.php. Smiley biggrin

Une petite relecture peut-être ? Ça devrait t'aider à la corriger. Smiley cligne
J'ai résolu ce pb il y a qq années et je l'utilise avec succès dans plusieurs applications pour l'exploration de fichier de grande taille (150000 lignes).
Entre autre : Dictionnaire (4000 entrées) généalogie 150000 lignes.
De plus la méthode des DYD externes me permet d'assembler plusieurs contenus et de les explorer.
Pour cela j'utilise les méthodes xslProc et xmlProc.
Il faut créer un formulaire attaché à une page HTML, celui-ci transmet le contenu de la (ou des) requête(s) à un javascript (que l'ai appelé moteur.js) qui met en relation les fichiers XML et XSL grace aux méthodes citées, puis transmet les éléments de la requête au fichier xsl grace à deux méthodes xslProc comme suit. Le contenu formulaire peut aussi être remplacé par une liste déroulante.

code javascript (moteur de recherche)


var domaine //nom de variable à définir par l'auteur
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument"); 
xslDoc.async= false;
xslDoc.load("fichier.xsl");//chemin du fichier xml (à partir de la position de ce script)
xmlDoc.validateOnParse = false;
xmlDoc.async = false;
xmlDoc.load("fichier.xml");// chemin du fichier xml (à partir de la position de ce script)
var xslt = new ActiveXObject("Msxml2.XSLTemplate");
xslt.stylesheet = xslDoc;
var xslProc = xslt.createProcessor(); 
xslProc.input = xmlDoc;




xslProc.addParameter("nomparametreXSL", arg);
xslProc.transform();

le résultat est affiché avec la méthode

zoneDefinition.innerHTML=xslProc.output;



Dans le fichier xsl il faut déclarer le paramètre qui va servir à rechercher et afficher le contenu des noeuds correspondant à la requête.
d

<xsl:if test="element=$nomparametreXSL">
action à réaliser
(par exmple <xsl:apply-templates/> ou autre
</xsl:if> 



Il faudra simplement écrire une portion de script dans le fichier moteur.js qui détecte le navigateur car il y des différences entre IE et FF. Par contre je n'ai pas trouvé la méthode qui fonctionne avec Safari.
Bon tests.
Cordialement