在HTML表格中交换X和Y轴或转置:

3

我有一个HTML表格需要旋转/轴交换。它可以离线完成。有没有人知道我可以使用的工具?


1
输入样本是什么?如果没有@colspan和@rowspan,答案很简单,否则算法将变得复杂。也许为了优化目的,可以仅使用计算的基数(通过细粒度遍历传递占用的单元格)构建一个临时结果,然后输出基数反转。 - user357812
好问题,+1。请查看我的答案,其中包含完整且简短的解决方案。 - Dimitre Novatchev
@Dimitre:在假设表具有规则结构的前提下。 - user357812
@Alejandro:是的,我认为这就是@richard想要的。 - Dimitre Novatchev
1个回答

8

这个转变:

<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>

当应用于此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>

能够产生所需的、正确的结果:

<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>

请注意:假设表格具有规则的结构。


两个变量vNumRows和vNumCols已经定义了,但是从未被使用过。 - michael.hor257k
@michael.hor257k:感谢您注意到这个问题。可能是之前版本的编辑不完整导致的结果。我会进行调查和编辑。 - Dimitre Novatchev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接