如何在XSL中“向前看”获取表列标题?

时间:2012-04-13 15:19:49

标签: xml xslt xmltable

我有类似以下的XML结构:

<Root>
  <Node Name="File System">
    <Node Name="C:\Windows\System32\drivers\etc\hosts">
      <Table>
        <Row>
          <Column Name="Name" Value="localhost" />
          <Column Name="IP" Value="127.0.0.1" />
        </Row>
        <Row>
        .....
    </Node>
  </Node>
</Root>

我有xslt代码来遍历节点和表,但是当我想以某种方式将列名称作为标题时,我会陷入困境。

这是工作代码(除了抓住列标题:

<xsl:template match="Root">
  <ul>
    <xsl:apply-templates select="Node" />
  </ul>
 </xsl:template>

<xsl:template match="Node">
  <li>
    <xsl:value-of select="@Name" />
    <xsl:if test="Node">
      <ul>
        <xsl:apply-templates select="Node" />
      </ul>
    </xsl:if>
    <xsl:if test="Attributes">
      <xsl:apply-templates select="Attributes" />
    </xsl:if>
    <xsl:if test="Table">
      <xsl:apply-templates select="Table" />
    </xsl:if>
  </li>
</xsl:template>

<xsl:template match="Attributes">
  <ul>
    <xsl:apply-templates select="Attribute" />
  </ul>
</xsl:template>

<xsl:template match="Attribute">
  <li>
    <b><xsl:value-of select="@Name" />:</b> <xsl:value-of select="@Value" />
  </li>
</xsl:template>

<xsl:template match="Table">
  <table border="1">
    <tbody>
      <xsl:apply-templates select="Row" />
    </tbody>
  </table>
</xsl:template>

<xsl:template match="Row">
  <tr>
    <xsl:apply-templates select="Column" />
  </tr>
</xsl:template>

<xsl:template match="Column">
  <td>
    <xsl:value-of select="@Value" />
  </td>
</xsl:template>

1 个答案:

答案 0 :(得分:0)

怎么样:

<xsl:template match="Row" mode="thead">
  <th>
    <xsl:apply-templates select="Column" mode="thead"/>
  </th>
</xsl:template>

<xsl:template match="Column" mode="thead">
  <td>
    <xsl:value-of select="@Name" />
  </td>
</xsl:template>

然后将match="Table"更改为

<xsl:template match="Table">
  <table border="1">
    <thead>
      <xsl:apply-templates select="Row[1]" mode="thead"/>
    </thead>
    <tbody>
      <xsl:apply-templates select="Row" />
    </tbody>
  </table>
</xsl:template>