Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2763 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  probleme xsl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme xsl

n°1835376
ramy31
Posté le 07-01-2009 à 23:06:12  profilanswer
 

Bonjour,
 
J'ai ce xsl qui fonctionne bien.  Je souhaite limiter le xml résultant en limitant le nombre de noeuds <photo> en sortie (par exemple garder les 10 premières photos), mais je ne sais pas comment faire....  
Une idée ?
Merci d'avance

Citation :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output encoding="utf-8" omit-xml-declaration="yes"/>
 
   <xsl:template match="/">
      <tiltviewergallery>
         <photos>
            <xsl:apply-templates />
         </photos>
      </tiltviewergallery>
   </xsl:template>
 
   <xsl:template match="tiltviewergallery">
      <xsl:apply-templates select="/tiltviewergallery/photos/photo">
         <xsl:sort select="@imageurl" order="descending" />
      </xsl:apply-templates>
   </xsl:template>
 
 
   <xsl:template match="/tiltviewergallery/photos/photo">
       <photo imageurl="{@imageurl}">
      </photo>
   </xsl:template>
</xsl:stylesheet>


 
exemple de xml produit

Citation :

<tiltviewergallery>
 <photos>
  <photo imageurl="/phpgraphy-0.9.13a/pictures/2009-01-05 Lola/IMG_7646_resize.JPG"/>
  <photo imageurl="/phpgraphy-0.9.13a/pictures/2009-01-05 Lola/IMG_7639_resize.JPG"/>
  <photo imageurl="/phpgraphy-0.9.13a/pictures/2009-01-05 Lola/IMG_7637_resize.JPG"/>
  <photo imageurl="/phpgraphy-0.9.13a/pictures/2009-01-05 Lola/IMG_7636_resize.JPG"/>
 </photos>
</tiltviewergallery>
 

mood
Publicité
Posté le 07-01-2009 à 23:06:12  profilanswer
 

n°1835430
avander
Posté le 08-01-2009 à 09:30:02  profilanswer
 

Utilise la fonction xpath position(), tu teste et tu limite à 10.

n°1835588
ramy31
Posté le 08-01-2009 à 14:35:40  profilanswer
 

avander a écrit :

Utilise la fonction xpath position(), tu teste et tu limite à 10.


 
j'ai rajouté "position () ", mais ça me ramène les 5 premiers AVANT tri alors que je voudrais les 5 premiers APRES tri... Je sèche completement....
 
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output encoding="utf-8" omit-xml-declaration="yes"/>
 
   <xsl:template match="/">
      <tiltviewergallery>
         <photos>
            <xsl:apply-templates />
         </photos>
      </tiltviewergallery>
   </xsl:template>
 
   <xsl:template match="tiltviewergallery">
      <xsl:apply-templates select="/tiltviewergallery/photos/photo">
         <xsl:sort select="@imageurl" order="descending" />
      </xsl:apply-templates>
   </xsl:template>
 
   <xsl:template match="/tiltviewergallery/photos/photo[position() &lt; 5]">
      <photo imageurl="{@imageurl}">
      </photo>
   </xsl:template>
   
   <xsl:template match="/">
      <tiltviewergallery>
         <photos>
            <xsl:apply-templates />
         </photos>
      </tiltviewergallery>
   </xsl:template>
</xsl:stylesheet>

n°1835843
avander
Posté le 09-01-2009 à 09:21:49  profilanswer
 

Ton stylesheet est comment dire... assez brouillon.  
 
T'as plusieurs templates qui se tirent dans les pattes imho. Il te faut un template avec match="photo" je pense.

n°1836223
ramy31
Posté le 09-01-2009 à 22:02:37  profilanswer
 

avander a écrit :

Ton stylesheet est comment dire... assez brouillon.  
 
T'as plusieurs templates qui se tirent dans les pattes imho. Il te faut un template avec match="photo" je pense.


 
Oui je sais,  mais je patauge un peu avec ce xsl....
 
J'ai trouvé ceci à la place. Cela me semble mieux écrit et réponds à mon besoin... (mais je me demande si on peut faire mieux ? plus simple quoi ? t'en penses quoi avander ?)
 
Merci avander

Code :
  1. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  2.    <xsl:output encoding="utf-8" method="xml" indent="yes" />
  3.    <xsl:template match="/">
  4.       <tiltviewergallery>
  5.          <photos>
  6.             <xsl:for-each select="/tiltviewergallery/photos/photo">
  7.                <xsl:sort select="@imageurl" order="descending" />
  8.                <xsl:if test="(position()&lt;5)">
  9.                   <xsl:copy-of select="." />
  10.                </xsl:if>
  11.             </xsl:for-each>
  12.          </photos>
  13.       </tiltviewergallery>
  14.    </xsl:template>
  15. </xsl:stylesheet>

n°1836518
avander
Posté le 11-01-2009 à 12:12:12  profilanswer
 

Tant que ça marche...
 
Le xsl:for-each n'est pas fait pour ça, il sert à 'choper' des elements qui sont 'hors flux', des elements venus 'd'ailleurs' dont on a besoin alors qu'on est dans un template bien précis.
 
Perso, je ferais un template root dans lequel je fais un apply-templates vers les elements 'photo' avec le sort qui va bien et un template pour photo avec dedans le test.


Message édité par avander le 11-01-2009 à 12:12:44

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  probleme xsl

 

Sujets relatifs
[RESOLU] Probleme synchro thread[Résolu][C] probleme avec une macro
Problème à centrer une image [RESOLU]Balise Object probleme IE
[SGBD/SQL] probleme d'espace oracle8iprobleme avec un combobox
[ACCESS] Problème requête et valeur par défautProbleme avec DATE_FORMAT au changement d'année
probleme c++ installation qtprobleme installation sdl_image
Plus de sujets relatifs à : probleme xsl


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR