2011-08-22 73 views
1

我相信我有一个非常有趣的问题需要解决。我有一个XML是这样的:使用xml的属性来生成动态html表格

<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表格。在TRS和辨证论治的内容必须是“动态”的基础上XPOS和XML的ypos属性设置..输出应该是这样的:

<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个相邻元素略有不同。 例如

<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解析器?还是其他什么?如何 ?

回答

0

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

作为解决它在所有:

  1. 使用四舍五入或类似的方法“1/2关”问题
  2. 排序的数据来解决。
  3. 创建一个表进行排序的数据应该是微不足道现在

,我希望你要问“和不排序?” (因为它太贵了,无论如何)。答案:您将以这种或那种方式对数据进行排序。在内存中创建一个巨大的地图并根据坐标添加元素即为排序。这只是不明显的。

[编辑]也许这招也将工作:而不是一个表,使用divposition: absolute和缩放的坐标,直到文本不再重叠。这将模拟一个表,但它是否适用于您取决于坐标是否实际上意味着某些东西(即它们不是随机的,但其他系统使用它们来布置数据)

+0

感谢您的快速响应..好吧,所以xslt是没有问题的,我想。使用Java解析器,我同意我需要以某种方式对列表进行排序..但是,如何知道它是2列还是3列还是4列表? –

+0

四舍五入和排序后,将'xpos'的值添加到'Set'。集==的列数的大小。 –

0

最简单的方法是编写解析它并将其转换为所需格式的小型java代码。 用xslt做它非常复杂。 实际上这是用xslt做它的噩梦,特别是如果你想稍后维护它并改变规则。 java代码将很容易理解和维护,但将来会很长。

+0

好吧,所以xslt无可厚非,我想。使用Java解析器,我同意我需要以某种方式对列表进行排序..但是,如何知道它是2列还是3列还是4列表? –