如何通过xslt将xml转换为分层表?

时间:2013-11-28 10:44:55

标签: xml xslt

任何人都知道如何使用XSLT将XML转换为层次结构表?我已经工作了几个小时,不知道该怎么做。样本xm​​l如下:

<?xml version="1.0" encoding="UTF-8"?>
<table>
<h1>
    <value1>1</value1>
    <h2>
        <value2>2</value2>
        <h3>
            <value3>3</value3>
            <value3>3</value3>
            <value3>3</value3>
        </h3>
    </h2>
    <h2>
        <value2>2</value2>
        <h3>
            <value3>3</value3>
            <value3>3</value3>
            <value3>3</value3>
        </h3>
    </h2>
</h1>
<h1>
    <value1>1</value1>
    <h2>
        <value2>2</value2>
        <h3>
            <value3>3</value3>
            <value3>3</value3>
            <value3>3</value3>
        </h3>
    </h2>
    <h2>
        <value2>2</value2>
        <h3>
            <value3>3</value3>
            <value3>3</value3>
            <value3>3</value3>
        </h3>
    </h2>
</h1>
</table>

输出将是这样的:

    1  2   3
           3
           3
       2   3
           3
           3
    1  2   3
           3
           3
       2   3
           3
           3

PS:每个数字都在一个单元格中,总共有12行。数字1跨越6行,数字2跨越3行。

1 个答案:

答案 0 :(得分:0)

假设您正在寻找HTML输出,因此第一行<td colspan="...">并且相应的列完全省略了span中的后续行,那么:

  • 您需要每<tr>value3,并且您始终需要第三列。
  • 如果此value3是其父value3中的第一个h2,那么您还需要在其value2之前,
  • 如果 value2是其h2中的第一个h1,那么您需要在其value1之前。
<xsl:template match="table">
  <table>
    <xsl:apply-templates select=".//value3" />
  </table>
</xsl:template>

<xsl:template match="value3">
  <tr>
    <xsl:if test="not(preceding-sibling::value3)">
      <xsl:apply-templates select="ancestor::h2[1]" />
    </xsl:if>
    <td><xsl:value-of select="." /></td>
  </tr>
</xsl:template>

<xsl:template match="h2">
  <xsl:if test="not(preceding-sibling::h2)">
    <xsl:apply-templates select="ancestor::h1[1]" />
  </xsl:if>
  <td rowspan="{count(.//value3)}"><xsl:value-of select="value2" /></td>
</xsl:template>

<xsl:template match="h1">
  <td rowspan="{count(.//value3)}"><xsl:value-of select="value1" /></td>
</xsl:template>

rowspan属性很简单,因为您的XML嵌套得很好 - 跨度始终是此value3h1下的后代h2元素的数量。

相关问题