2010-12-10 5 views
3

J'ai une table html qui nécessite un échange rotatif/axe. Cela peut être fait hors ligne. Quelqu'un sait-il un outil que je peux utiliser pour le faire?transpose/permute x, y axes dans la table html

+1

Quel est l'échantillon d'entrée? Sans @colspan et @rowspan, la réponse est simple, sinon l'algorithme sera complexe. Peut-être à des fins d'optimisation, on pourrait construire un résultat temporel avec rien de plus que de la cardinalité calculée (traversée à grains fins passant des cellules ocuppées), puis une inversion de cardinatlté de sortie. –

+0

Bonne question, +1. Voir ma réponse pour une solution complète et courte. –

+0

@Dimitre: Avec l'hypothèse que la table a une structure régulière. –

Répondre

8

Cette transformation:

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

<xsl:template match="table"> 
    <xsl:for-each select="tr[1]/td"> 
     <xsl:variable name="vRowPos" select="position()"/> 
     <tr> 
     <xsl:for-each select="/table/tr"> 
     <xsl:variable name="vColPos" select="position()"/> 
     <xsl:copy-of select="/table/tr[$vColPos]/td[$vRowPos]"/> 
     </xsl:for-each> 
     </tr> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

lorsqu'il est appliqué sur ce document XML:

<table> 
<tr> 
    <td>A11</td> 
    <td>A12</td> 
    <td>A13</td> 
    <td>A14</td> 
    <td>A15</td> 
</tr> 
<tr> 
    <td>A21</td> 
    <td>A22</td> 
    <td>A23</td> 
    <td>A24</td> 
    <td>A25</td> 
</tr> 
<tr> 
    <td>A31</td> 
    <td>A32</td> 
    <td>A33</td> 
    <td>A34</td> 
    <td>A35</td> 
</tr> 
</table> 

produit les résultats recherchés, corriger:

<table> 
    <tr> 
     <td>A11</td> 
     <td>A21</td> 
     <td>A31</td> 
    </tr> 
    <tr> 
     <td>A12</td> 
     <td>A22</td> 
     <td>A32</td> 
    </tr> 
    <tr> 
     <td>A13</td> 
     <td>A23</td> 
     <td>A33</td> 
    </tr> 
    <tr> 
     <td>A14</td> 
     <td>A24</td> 
     <td>A34</td> 
    </tr> 
    <tr> 
     <td>A15</td> 
     <td>A25</td> 
     <td>A35</td> 
    </tr> 
</table> 

Remarque:: L'hypothèse est que la table a la structure régulière.

+0

Les deux variables, vNumRows et vNumCols, sont définies - mais jamais utilisées. –

+0

@ michael.hor257k: Merci d'avoir remarqué cela. Doit être le résultat d'une modification incomplète d'une version précédente. Va enquêter et modifier. –

Questions connexes