如何使用XSL for-each将XML转换为HTML表

时间:2009-08-26 08:10:00

标签: xml xslt

我正在尝试使用XSL转换某些XML,以使输出看起来更好,对其他用户更具可读性。我有一些XML:

<G>
  <OE>
    <example1>Sample 1</example1>
    <example2>Sample 2</example2>
    <var name="name1">
      <integer>1</integer>
    </var>
  </OE>
</G>

我想从中获取所有详细信息并将其显示在表中,因此我使用以下XSL代码:

<xsl:stylesheet 
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:template match="/">
    <html>
      <body>
        <h2>Heading</h2>
        <table border="1">
          <tr bgcolor="#3399FF">
            <th>Example 1</th>
            <th>Example 2</th>
            <th>Var name</th>
            <th>Int</th>
          </tr>
          <xsl:for-each select="G/OE">
            <xsl:for-each select="var">
              <tr>
                <td>
                  <xsl:value-of select="Example 1" />
                </td>
                <td>
                  <xsl:value-of select="Example 2" />
                </td>
                <td>
                  <xsl:value-of select="@name" />
                </td>
                <td>
                  <xsl:value-of select="integer" />
                </td>
              </tr>
            </xsl:for-each>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

我知道以下XSL无法正常运行。我希望输出为:

样本1,样本2,名称1,1 - 以表格格式。

我的问题是我不知道该怎么做。在上面的XSL代码中,它只检索var和integer。如果我只使用顶部<xsl:for-each>,则只检索前两个。

我尝试在第一个被选中之后移动第二个<xsl:for-each>,所以在:

之间
<td><xsl:value-of select="Example 2"/></td>

<td><xsl:value-of select="@name"/></td>

我收到错误。有没有办法解决这个问题?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你在var上循环(在内部for-each中),因此这两个示例标记都在你的范围之外。您可能希望删除内部for-each循环(并引用var / @ name和var / integer而不是@name和整数)。