XSLT - 从XML生成HTML

时间:2013-10-17 04:05:56

标签: xml xslt xpath xslt-1.0

在XSL中,我需要生成HTML标记,具体取决于for-each的每次迭代..

例如,如果我有以下XML:

<Items>
  <Car>Mercedes</Car>
  <Bike>Gt</Bike>
  <House>123</House>
  <Skate>111</Skate>
  <Plane>5522</Plane>
  <tv>Sony</tv>
</Items>

我的XSL需要生成HTML,每行显示2个项目。 我需要每行只显示4个tds,其中2个带有标题,另外2个带有值。 在我之前的示例中,预期的HTML将是:

<table>
<tr>
  <td>Car</td>
  <td>Mercedes</td>
  <td>Bike</td>
  <td>Gt</td>
</tr>
<tr>
  <td>House</td>
  <td>123</td>
  <td>Skate</td>
  <td>111</td>
</tr>
<tr>
  <td>Plane</td>
  <td>5522</td>
  <td>tv</td>
  <td>Sony</td>
</tr>
</table>

我已尝试使用when / each在for-each中,打开或关闭<tr>,但XSL无效..

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

使用:

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

  <xsl:template match="Items">
    <table>
      <xsl:for-each select="*[position() mod 2 != 0]">
        <tr>
          <td>
            <xsl:value-of select="name()"/>
          </td>
          <td>
            <xsl:value-of select="."/>
          </td>
          <td>
            <xsl:value-of select="name(following-sibling::*)"/>
          </td>
          <td>
            <xsl:value-of select="following-sibling::*"/>
          </td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>

输出:

<table>
  <tr>
    <td>Car</td>
    <td>Mercedes</td>
    <td>Bike</td>
    <td>Gt</td>
  </tr>
  <tr>
    <td>House</td>
    <td>123</td>
    <td>Skate</td>
    <td>111</td>
  </tr>
  <tr>
    <td>Plane</td>
    <td>5522</td>
    <td>tv</td>
    <td>Sony</td>
  </tr>
</table>