XSL如何创建动态表行

时间:2012-01-26 18:04:30

标签: xml xslt dynamic xpath row

我的xml看起来像这样

<catalog>
<cd>
 <title>Empire Burlesque</title>
 <artist>Bob Dylan</artist>
 <country>USA</country>
 <company>Columbia</company>
 <price>10.90</price>
 <year>1985</year>
</cd>
<cd>
 <title>Hide your heart</title>
 <artist>Bonnie Tyler</artist>
 <country>UK</country>
 <company>CBS Records</company>
 <price>9.90</price>
 <year>1988</year>
</cd>
</catalog>

我想要实现的是html表,其中行数是动态的,例如:

表应如下所示:

TABLE HEADER
<tr>
 <td>Title</td>
 <td>Empire Burlesque</td>
</tr>
<tr>
 <td>Artist</td>
 <td>Bob Dylan</td>
</tr>
<tr>
 <td>country</td>
 <td>USA</td>
</tr>

继续执行可用于cd的所有节点。

我希望能够为<cd>下的可用节点数循环,并为html输出中的每个节点生成单独的<tr>。因此,我不必将<xsl:value-of select>与特定的xml节点名称一起使用。

任何人都可以帮我理解这部分的基本知识吗?感谢。

1 个答案:

答案 0 :(得分:0)

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

  <xsl:template match="catalog">
    <table>
      <xsl:apply-templates select="cd/*"/>
    </table>
  </xsl:template>

  <xsl:template match="cd/*">
    <tr>
      <td>
        <xsl:value-of select="name()"/>
      </td>
      <td>
        <xsl:value-of select="."/>
      </td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

输出:

<table>
  <tr>
    <td>title</td>
    <td>Empire Burlesque</td>
  </tr>
  <tr>
    <td>artist</td>
    <td>Bob Dylan</td>
  </tr>
  <tr>
    <td>country</td>
    <td>USA</td>
  </tr>
  <tr>
    <td>company</td>
    <td>Columbia</td>
  </tr>
  <tr>
    <td>price</td>
    <td>10.90</td>
  </tr>
  <tr>
    <td>year</td>
    <td>1985</td>
  </tr>
  <tr>
    <td>title</td>
    <td>Hide your heart</td>
  </tr>
  <tr>
    <td>artist</td>
    <td>Bonnie Tyler</td>
  </tr>
  <tr>
    <td>country</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>company</td>
    <td>CBS Records</td>
  </tr>
  <tr>
    <td>price</td>
    <td>9.90</td>
  </tr>
  <tr>
    <td>year</td>
    <td>1988</td>
  </tr>
</table>