2017-10-16 4 views
0

J'essaie d'afficher plusieurs images qui ont le même nom dans mon xml en utilisant xslt. Voici un exemple de l'élément « restaurant » et ses enfants dans mon XML:Afficher plusieurs images du même nom d'élément dans xsl

<cuisine type="Indian"> 
<restaurant> 
    <name>Indu</name> 
    <logo>indu_logo.png</logo> 
    <pics>Website-Heirloom.jpg</pics> 
    <pics>Website-Snapper.jpg</pics> 
    <url>http://indudining.com.au</url> 
    <address>350 George Street, (entry via Angel Place) Sydney</address> 
    <phonenumber>02 9223 0158</phonenumber> 
    <openinghours>12:00PM to late</openinghours> 
    <delivery>Minimum Price: $50. Delivery Fee: $10</delivery> 
    <description>INDU is a celebration of southern Indian and Sri Lankan village culture, flavours and local hospitality.</description> 
    <menu>Desserts, Paratha, Basmati rice</menu> 
    <onlinebooking>Yes</onlinebooking> 
    <event>No</event> 
</restaurant> 

Je suis en train de construire une page de style pour afficher ces informations, et je l'ai réussi à afficher tout ce que je dois à l'exception du "pics", comme quand j'appelle 'pics' il (seulement) affiche la première image. Voici le XSLT actuel que j'ai:

<xsl:template match="/"> 

    <html> 
    <head> 

     <title>Restaurant Info</title>  


     </head> 
     <body> 

     <h1>Restaurant List (A-Z):</h1> 

     <xsl:for-each select="cuisine/restaurant"> 

      <xsl:sort select="name"/> 

      <SPAN> <img src="images/{logo}" width="100"/> </SPAN> 
      <BR /> 
      <SPAN STYLE="font-weight:bold">Restauraunt Name: </SPAN> 
      <xsl:value-of select="name" /> 
      <BR /> 
      <SPAN STYLE="font-weight:bold">Description: </SPAN> 
      <xsl:value-of select="description" /> 
      <BR /> 
      <SPAN STYLE="font-weight:bold">URL: </SPAN> 
      <xsl:value-of select="url" /> 
      <BR /> 
      <SPAN STYLE="font-weight:bold">Address: </SPAN> 
      <xsl:value-of select="address" /> 
      <BR/> 
      <SPAN> <img src="images/{pics}" width="200"/> </SPAN> 
      <BR /> 


      <P/> 
      <hr/> 

     </xsl:for-each> 



     </body> 
    </html> 

</xsl:template> 

Quelle est la meilleure façon d'afficher les photos sans se référer directement aux fichiers? J'ai besoin de mon xslt pour être applicable à plusieurs documents XML avec les mêmes noms de nœuds. Jusqu'ici, j'ai essayé: de faire une autre boucle "for-each" dans ma boucle for-each principale et d'y appeler des "pics", en mettant des parenthèses après "pics()" en espérant qu'elle passerait à travers chacune d'entre elles, appeler les photos avec 'xsl: value-of' au lieu de faire un nouveau template appelé et mettre dans le corps. Rien de tout cela n'a fonctionné (même si j'ai peut-être mal fait), donc je n'ai pas sauvegardé le code que j'ai trouvé, mais si quelqu'un sait comment le faire et ne pense pas que je l'ai donné assez bien pour mériter entendre comment, laissez-moi savoir et mal réécrire avec plaisir mon code incorrect.

Merci.

Répondre

0

Vous pouvez ajouter une autre boucle <xsl:for-each> pour le <pics> comme ci-dessous.

<xsl:template match="/"> 
    <html> 
     <head> 
      <title>Restaurant Info</title> 
     </head> 
     <body> 
      <h1>Restaurant List (A-Z):</h1> 
      <xsl:for-each select="cuisine/restaurant"> 
       <xsl:sort select="name" /> 
       ... 
       <xsl:for-each select="pics"> 
        <SPAN> 
         <img src="images/{.}" width="200" /> 
        </SPAN> 
       </xsl:for-each> 
       ... 
      </xsl:for-each> 
     </body> 
    </html> 
</xsl:template> 

Sortie

<SPAN> 
    <img src="images/Website-Heirloom.jpg" width="200" /> 
</SPAN> 
<SPAN> 
    <img src="images/Website-Snapper.jpg" width="200" /> 
</SPAN> 
+0

THANKYOU! J'ai essayé la deuxième boucle, mais je n'ai pas cité les images en utilisant "images/{.}". Leçon apprise (: – rodney1234