2013-10-17 7 views
0

En XSL je dois générer des balises HTML en fonction de ce que l'itération de la for-each je suis ..XSLT - Génération HTML à partir de XML

Par exemple, si j'ai le code XML suivant:

<Items> 
    <Car>Mercedes</Car> 
    <Bike>Gt</Bike> 
    <House>123</House> 
    <Skate>111</Skate> 
    <Plane>5522</Plane> 
    <tv>Sony</tv> 
</Items> 

Et avec mon XSL y besoin de générer le code HTML affichant 2 éléments pour chaque ligne. Je n'ai besoin d'afficher que 4 tds par ligne, 2 d'entre eux avec le titre et les 2 autres avec la valeur. Avec mon exemple précédent le code HTML attendu serait:

<table> 
<tr> 
    <td>Car</td> 
    <td>Mercedes</td> 
    <td>Bike</td> 
    <td>Gt</td> 
</tr> 
<tr> 
    <td>House</td> 
    <td>123</td> 
    <td>Skate</td> 
    <td>111</td> 
</tr> 
<tr> 
    <td>Plane</td> 
    <td>5522</td> 
    <td>tv</td> 
    <td>Sony</td> 
</tr> 
</table> 

I, ai essayé avec quand/sinon à l'intérieur du for-each, ouvrir ou fermer le <tr>, mais le XSL est invalide ..

Est il y a un moyen d'y parvenir?

Répondre

1

Utilisation:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="Items"> 
    <table> 
     <xsl:for-each select="*[position() mod 2 != 0]"> 
     <tr> 
      <td> 
      <xsl:value-of select="name()"/> 
      </td> 
      <td> 
      <xsl:value-of select="."/> 
      </td> 
      <td> 
      <xsl:value-of select="name(following-sibling::*)"/> 
      </td> 
      <td> 
      <xsl:value-of select="following-sibling::*"/> 
      </td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </xsl:template> 
</xsl:stylesheet> 

sortie:

<table> 
    <tr> 
    <td>Car</td> 
    <td>Mercedes</td> 
    <td>Bike</td> 
    <td>Gt</td> 
    </tr> 
    <tr> 
    <td>House</td> 
    <td>123</td> 
    <td>Skate</td> 
    <td>111</td> 
    </tr> 
    <tr> 
    <td>Plane</td> 
    <td>5522</td> 
    <td>tv</td> 
    <td>Sony</td> 
    </tr> 
</table> 
Questions connexes