1

「長方形」であることを確認するために、html スタイルのテーブル データで xml をチェックできる必要があります。たとえば、これは長方形(2x2)です

<table>
  <tr>
    <td>Foo</td>
    <td>Bar</td>
  </tr>
  <tr>
    <td>Baz</td>
    <td>Qux</td>
  </tr>
</table>

これではありません

<table>
  <tr>
    <td>Foo</td>
    <td>Bar</td>
  </tr>
  <tr>
    <td>Baz</td>
  </tr>
</table>

これは、行と列のスパンと、2 つのスタイルのマークアップを受け入れる必要があるという事実によって複雑になります。つまり、スパンされたセルが空として含まれるtd 、スパン セルが省略されます。

<!-- good (3x2), spanned cells included -->
<table>
  <tr>
    <td colspan="2">Foo</td>
    <td/>
    <td rowspan="2">Bar</td>
  </tr>
  <tr>
    <td>Baz</td>
    <td>Qux</td>
    <td/>
  </tr>
</table>

<!-- also good (3x2), spanned cells omitted -->
<table>
  <tr>
    <td colspan="2">Foo</td>
    <td rowspan="2">Bar</td>
  </tr>
  <tr>
    <td>Baz</td>
    <td>Qux</td>
  </tr>
</table>

以下は、処理方法があいまいな不適切なテーブルの例です。

<!-- bad, looks like spanned cells are included but more cells in row 1 than 2 -->
<table>
  <tr>
    <td colspan="2">Foo</td>
    <td/>
    <td rowspan="2">Bar</td>
    <td>BAD</td>
  </tr>
  <tr>
    <td>Baz</td>
    <td>Qux</td>
    <td/>
  </tr>
</table>

<!-- bad, looks like spanned cells are omitted but more cells in row 1 than 2 -->
<table>
  <tr>
    <td colspan="2">Foo</td>
    <td rowspan="2">Bar</td>
    <td>BAD</td>
  </tr>
  <tr>
    <td>Baz</td>
    <td>Qux</td>
  </tr>
</table>

<!-- bad, can't tell if spanned cells are included or omitted -->
<table>
  <tr>
    <td colspan="2">Foo</td>
    <td rowspan="2">Bar</td>
  </tr>
  <tr>
    <td>Baz</td>
    <td>Qux</td>
    <td/>
  </tr>
</table>

<!-- bad, looks like spanned cells are omitted but a non-emtpy cell is overspanned -->
<table>
  <tr>
    <td colspan="2">Foo</td>
    <td rowspan="2">Bar</td>
  </tr>
  <tr>
    <td>Baz</td>
    <td>Qux</td>
    <td>BAD</td>
  </tr>
</table>

データを「スパンセルを含む」スタイルに正規化してから検証することを含む、この問題に対する有効な XSLT 2.0 ソリューションが既にありますが、私のソリューションは面倒で、1000 セルを超える領域を持つテーブルではパフォーマンスが低下し始めます。私の正規化と検証ルーチンには、セルを順番に反復し、スパンによって作成される必要があるセルのパラメーターを渡し、それらの座標をテーブルに渡すときにそれらを挿入することが含まれます。私はそれらのどちらにも満足していません。

この検証を達成するためのより賢い方法についての提案を探しています。これにより、大きなテーブルでより優れたパフォーマンス プロファイルが得られることが期待されます。説明する必要がありますがth、簡単にするために例からtd省略されています。これらは、どの回答にも含めることも無視することもできます。、、および/またはが同じ幅かthどうかを確認していません。これも含めたり省略したりできます。私は現在 XSLT 2.0 を使用していますが、3.0 のソリューションが 2.0 で実装されたソリューションよりも大幅に優れていれば、それに興味があります。theadtbodytfoot

4

1 に答える 1

0

この種の問題は XSLT には適していないと思います。特に、非常に大きなテーブルを処理する必要がある場合はそうです。

手続き型言語を使用してソリューションを開発することをお勧めします。おそらく、XSLT を使用して XML の前処理または後処理を行います。

于 2012-12-02T21:47:19.403 に答える