0

次のような 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>
4

1 に答える 1

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>
于 2012-04-13T15:41:07.733 に答える