2

XML タグに 500 個の名前のリストがあるとします。このリストを XSLT を使用して表に表示したいと考えています。XSLT テーブルには、最大で 3 つの行が必要です。列の数は気にしません。テーブルをスクロール可能な div に配置する予定です。名前のリストが 1,000 に増えても、必要な行は 3 つだけですが、列の数は必要なサイズに増やすことができます。

XSLTでこれを行うにはどうすればよいですか? XSL テーブルに関する限り、私は xsl:for-each に精通していますが、それだけです。

形式は次のようなものです。

< node1 > < node2 > < NAME >データ< /NAME > < NAME >データ< /NAME > ... < /node2 > < /node1 >

4

2 に答える 2

1

この変換:

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

 <xsl:param name="pnumRows" select="3"/>

 <xsl:variable name="vnumCells" select="count(/*/*/NAME)"/>
 <xsl:variable name="vcellsPerRow"
       select="ceiling($vnumCells div $pnumRows)"/>


 <xsl:template match="node2">
  <table>
    <xsl:apply-templates select="NAME[position() mod $vcellsPerRow = 1]"/>
  </table>
 </xsl:template>

 <xsl:template match="NAME">
  <tr>
    <xsl:apply-templates mode="copy" select=
    ". | following-sibling::*[not(position() >= $vcellsPerRow)]"/>
  </tr>
 </xsl:template>

 <xsl:template match="NAME" mode="copy">
  <td><xsl:value-of select="."/></td>
 </xsl:template>
</xsl:stylesheet>

次のように、指定された形式の XML ドキュメントに対して実行した場合:

<node1>
    <node2>
        <NAME>name1</NAME>
        <NAME>name2</NAME>
        <NAME>name3</NAME>
        <NAME>name4</NAME>
        <NAME>name5</NAME>
        <NAME>name6</NAME>
        <NAME>name7</NAME>
        <NAME>name8</NAME>
        <NAME>name9</NAME>
        <NAME>name10</NAME>
    </node2>
</node1>

必要な結果が生成されます。最初の 2 行のセル数が同じで、最後の行が短くなる可能性がある 3 つの行を持つテーブル:

    <table>
   <tr>
      <td>name1</td>
      <td>name2</td>
      <td>name3</td>
      <td>name4</td>
   </tr>
   <tr>
      <td>name5</td>
      <td>name6</td>
      <td>name7</td>
      <td>name8</td>
   </tr>
   <tr>
      <td>name9</td>
      <td>name10</td>
   </tr>
</table>
于 2010-07-20T13:45:22.593 に答える
0

XSLT を使用して XML を HTML テーブルに変換する方法について話している場合は、この記事を参照することをお勧めします。彼は、あなたが話していることを実行できるようにするいくつかのテンプレートを提供していますが、おそらく少し調整する必要があります.

于 2010-07-20T03:03:51.860 に答える