使用XSLT验证html样式的表数据

时间:2012-12-01 22:36:30

标签: xslt html-table xslt-2.0

我需要能够使用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>

行和列跨度以及我需要接受两种标记样式这一事实很复杂,其中跨越单元格包含为空td ,其中省略了span单元格

<!-- 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的表开始表现不佳细胞。我的规范化和验证例程涉及在单元格上顺序迭代并传递应该由跨度创建的单元格的参数,并在我在表格中传递它们时插入它们。我对他们中的任何一个都不满意。

我正在寻找有关更聪明的方法来实现此验证的建议,希望在大型表上有更好的性能配置文件。我需要考虑thtd,但为了简单起见,在示例中省略了th,可以在任何答案中包含或忽略它们。我没有检查theadtbody和/或tfoot是否具有相同的宽度,这也可以包含或省略。我目前正在使用XSLT 2.0,但如果它们明显优于2.0中实现的解决方案,我会对3.0解决方案感兴趣。

1 个答案:

答案 0 :(得分:0)

我不认为这种问题适合XSLT - 特别是如果你必须处理非常大的表。

我建议使用程序语言开发一个解决方案 - 可能使用XSLT来预处理或后处理XML。