2010-07-20 5 views
2

Disons que j'ai une liste de 500 noms dans les balises XML. Je veux afficher cette liste dans une table en utilisant XSLT. Dans la table XSLT, je veux avoir un maximum de trois lignes; Peu m'importe le nombre de colonnes que j'ai - j'ai l'intention de mettre la table dans un div scrollable. Si ma liste de noms atteint 1000, je ne veux toujours que trois lignes, mais le nombre de colonnes peut atteindre la taille nécessaire.Formatage de la table XML/XSL

Comment puis-je faire cela dans XSLT? En ce qui concerne les tables XSL, je connais le xsl: for-each, mais c'est à peu près tout.

Le format est quelque chose comme ceci:

< node1> < node2> < NOM> Données </NOM> < NOM> Données </NOM> ... </node2> </node1>

+0

Quel est le format de votre XML? Qu'entendez-vous par "Table XSL"? –

+0

Par "table XSL", je voulais dire une table HTML formatée par XSLT. Merci pour le lien ci-dessous Je vais vérifier. –

+0

Bonne question (+1). Voir ma réponse pour une solution complète. –

Répondre

1

Cette transformation:

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

<xsl:param name="pnumRows" select="3"/> 

<xsl:variable name="vnumCells" select="count(/*/*/NAME)"/> 
<xsl:variable name="vcellsPerRow" 
     select="ceiling($vnumCells div $pnumRows)"/> 


<xsl:template match="node2"> 
    <table> 
    <xsl:apply-templates select="NAME[position() mod $vcellsPerRow = 1]"/> 
    </table> 
</xsl:template> 

<xsl:template match="NAME"> 
    <tr> 
    <xsl:apply-templates mode="copy" select= 
    ". | following-sibling::*[not(position() >= $vcellsPerRow)]"/> 
    </tr> 
</xsl:template> 

<xsl:template match="NAME" mode="copy"> 
    <td><xsl:value-of select="."/></td> 
</xsl:template> 
</xsl:stylesheet> 

lorsqu'elle est effectuée sur un document XML avec le format spécifié, comme la suivante:

<node1> 
    <node2> 
     <NAME>name1</NAME> 
     <NAME>name2</NAME> 
     <NAME>name3</NAME> 
     <NAME>name4</NAME> 
     <NAME>name5</NAME> 
     <NAME>name6</NAME> 
     <NAME>name7</NAME> 
     <NAME>name8</NAME> 
     <NAME>name9</NAME> 
     <NAME>name10</NAME> 
    </node2> 
</node1> 

produit le résultat souhaité: une table avec trois lignes, où les deux premières lignes ont le même nombre de cellules et la dernière rangée peut être plus courte:

<table> 
    <tr> 
     <td>name1</td> 
     <td>name2</td> 
     <td>name3</td> 
     <td>name4</td> 
    </tr> 
    <tr> 
     <td>name5</td> 
     <td>name6</td> 
     <td>name7</td> 
     <td>name8</td> 
    </tr> 
    <tr> 
     <td>name9</td> 
     <td>name10</td> 
    </tr> 
</table> 
0

Si vous parlez de transformer XML en un tableau HTML en utilisant XSLT, je vous recommande de regarder this article. Il fournit quelques modèles qui vous permettront de faire ce dont vous parlez, mais il faudra probablement un peu peaufiner.