使用xml的属性生成动态html表

时间:2011-08-22 07:59:53

标签: html xml dynamic html-table

我相信我有一个非常有趣的问题需要解决。我有这样的XML:

<elements>
  <element name="nam1" val="John" xpos="10" ypos="10" />
  <element name="nam3" val="Mark" xpos="10" ypos="30" />
  <element name="nam4" val="Rick" xpos="50" ypos="30" />
  <element name="nam5" val="Jeff" xpos="10" ypos="50" />
  <element name="nam6" val="Dean" xpos="50" ypos="50" />
  <element name="nam2" val="Scott" xpos="50" ypos="10" />

xml中元素的位置可能不是连续的。

我要将其转换为HTML表格。需要根据XML的xpos和ypos属性“动态”设置TR和TD的内容。输出应该是这样的:

<table>
    <tr>
       <td>John</td><td>Scott</td>
    </tr>
    <tr>
       <td>Mark</td><td>Rick</td>
    </tr>
    <tr>
       <td>Jeff</td><td>Dean</td>
    </tr>
</table>

当xpos或ypos不完全相同时,事情会变得更复杂,但对于2个相邻元素则略有不同。 e.g。

<elements>
  <element name="nam1" val="John" xpos="10" ypos="12" />
  <element name="nam3" val="Mark" xpos="11" ypos="30" />
  <element name="nam4" val="Rick" xpos="53" ypos="32" />
  <element name="nam5" val="Jeff" xpos="09" ypos="52" />
  <element name="nam6" val="Dean" xpos="51" ypos="51" />
  <element name="nam2" val="Scott" xpos="50" ypos="10" />
</elements>

任何想法我如何实现这一目标?使用xslt或Java / Javascript dom解析器?或其他什么?怎么样?

2 个答案:

答案 0 :(得分:0)

最简单的是编写解析它的小型Java代码并将其转换为所需的格式。 使用xslt来完成它非常复杂。 实际上,使用xslt执行此操作是一场噩梦,特别是如果您想稍后维护它并更改规则。 java代码将来很容易理解和维护,但它会很长。

答案 1 :(得分:0)

我不敢尝试用XSLT来解决这个问题 - XSLT对于简单的基本转换很有用。虽然它可能会把它拉下来,但它可能会让你在这个过程中疯狂。

至于完全解决它:

  1. 使用舍入或类似方法解决“off by 1/2”问题
  2. 对数据进行排序。
  3. 从排序数据中创建表应该是微不足道的
  4. 现在,我希望你问“没有排序?” (因为它太贵了,无论如何)。答:您将以某种方式对数据进行排序。在内存中创建一个巨大的地图,并根据坐标添加元素是排序。这是不明显的。

    [编辑] 也许这个技巧也可行:代替表格,使用divposition: absolute并缩放坐标,直到文本不再重叠。这将模拟一个表,但它是否适用于你取决于坐标是否实际意味着什么(即它们不是随机的,但其他一些系统使用它们来布置数据)