Problème génération tableau après avoir parsé mon XML

Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007 - 30 mai 2006 à 14:42
Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007 - 2 juin 2006 à 09:27
Bonjour à tous,

Je sollicite votre aide car je suis dans une impasse et j'ai un problème :( Après avoir longtemps cherché, sur le net et sur ce site, je n'ai pas trouvé de solutions à mon problème.

Le principe est simple.

J'ai un fichier XML contennant des données et un fichier XSL pour la mise en forme. J'ai une page PHP avec un champ de recherche. A l'envoi du formulaire, mon parseur de XML se lance puis génère ensuite un tableau HTML
 Tout fonctionne bien.

Problème : pour un soucis de respect de la casse, j'éffectue 3 lecture du fichier XML (exemple si je recherche "test", la première lecture va chercher "test", la deuxième "TEST" et la troisème "Test" pour tout couvrir). Donc j'ai 3 tableaux qui se génèrent mais en un seul, c'est à dire que cela forme un seul tableau dans lequel j'ai parfois des doublons. (Exemple si dans une description j'ai "Test" et "TEST"). Ce que je souhaite faire concrètement c'est supprimer ces doublons. Je vous serais très reconnaissant si vous pouviez m'aider.

Mon parser :

function parser2($fxml, $fxsl, $famille, $version, $auteur, $q){
 
 $xh = xslt_create();



 $file=fopen($fxml,"r");
 $xml=fread($file,1024000);
 fclose($file);



 $file=fopen($fxsl,"r");
 $xsl=fread($file,1024000);
 fclose($file);



 $arguments = array(
   '/_xml' => $xml,
   '/_xsl' => $xsl
   );
 
   $parameters = array(
   'no' => $famille,
   'no2' => $version,
   'no3' => $auteur,
   'no4' => $q
 );
 $result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments, $parameters);
 $result=str_replace("array","array_unique",$result);
 
 xslt_free($xh);
 echo $result;



}

Et le lancement du parsing :

$recherche = strtolower($_POST['q']);
$recherche2 = strtoupper($_POST['q']);
$recherche3 = ucfirst($_POST['q']);
       
     parser2("./xml/faq.xml", "./xsl/faq4.xsl", "0", "0", "0", $recherche);
     parser2("./xml/faq.xml", "./xsl/faq4.xsl", "0", "0", "0", $recherche2);
     parser2("./xml/faq.xml", "./xsl/faq4.xsl", "0", "0", "0", $recherche3);


Je reste disponible si vous avez besoin d'autres renseignements. Merci d'avance pour votre aide

Akita

8 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 mai 2006 à 15:21
Hello,

je ne connais pas bien les fonctions XSLT de php4...mais y a quoi dans le xsl qui traite la demande, au juste...? Parce que je ne pense pas que tu aies forcément besoin d'appeler ta fonction 3 fois pour effectuer une recherche insensible à la casse.
0
Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007
30 mai 2006 à 15:33
Tout d'abord merci pour ta réponse.

Voila ce que contient le xsl :

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:php="http://php.net/xsl">
<xsl:output encoding="ISO-8859-1" method="html"/>



 <xsl:param name="no" />
 <xsl:param name="no2" />
 <xsl:param name="no3" />
 <xsl:param name="no4" />
 
 
 <xsl:template match="Synthese">
 
  <xsl:choose>
   <xsl:when test="$no='0' and $no2='0' and $no3='0'">
    
     <xsl:for-each select="Record">
      <xsl:choose>
       <xsl:when test="contains(Titre/text(),$no4) or contains(Description/text(),$no4) or contains(Solution/text(),$no4)">
        <tr>
         <td>[faq.php?no={./Numero} <xsl:value-of select="Numero"/>]</td>
         <td><xsl:value-of select="Auteur"/></td>
         <td><xsl:value-of select="Date"/></td>
         <td><xsl:value-of select="Titre"/></td>
         <td><xsl:value-of select="Famille"/></td>
         <td><xsl:value-of select="Version"/></td>
        </tr>
       </xsl:when>
      </xsl:choose>
     </xsl:for-each>
    
   </xsl:when>


Merci pour ton aide :-)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 mai 2006 à 15:53
Ok,

jette un oeil ici :
http://www.w3.org/TR/xpath#function-translate

translate () te permettra de faire fi de la casse.
En gros, tu fais l'equivalent d'un strtolower ou strtoupper comme tu veux sur les 2 arguments (text du noeud, et texte recherché), pour qu'ils aient la même casse. Il te retournera , si tu cherches Text : TEXT, text, TeXt etc...
et ce, en un seul appel.
0
Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007
30 mai 2006 à 15:55
Excuse moi je vais paraitre un peu bête mais tu peux un peux plus expliquer ? j'ai déjà lu de la doc dessus mais j'ai pas compris  :-( ca se passe dans le xsl ? ou je dois mettre le code ?

Merci beaucoup pour ton aide :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007
31 mai 2006 à 09:10
Est ce qu'il y a quelqu'un pour expliquer le TRANSLATE svp ? :-/
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 mai 2006 à 09:13
translate ('test', 'tes', 'TES') va renvoyer 'TEST'.


Il prend le 1er argument, et dans ce 1er argument, les lettres données dans le second, et les remplace dans le premier argument comme leur traduction dans le 3ème.


 
0
Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007
2 juin 2006 à 09:26
Merci mais avec ca, ca revient au même si je fais mes :

$recherche = strtolower($_POST['q']);
$recherche2 = strtoupper($_POST['q']);
$recherche3 = ucfirst($_POST['q']);

non ?

Sinon le translate faut le mettre ou ?

Merci pour ton aide
0
Akita95 Messages postés 23 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 30 juillet 2007
2 juin 2006 à 09:27
En fait faut que je supprime juste les doublons dans le tableau HTML que je génère mais je vois pas comment faire avec une structure comme ca
0
Rejoignez-nous