我相信我有一个非常有趣的问题需要解决。我有这样的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解析器?或其他什么?怎么样?
答案 0 :(得分:0)
最简单的是编写解析它的小型Java代码并将其转换为所需的格式。 使用xslt来完成它非常复杂。 实际上,使用xslt执行此操作是一场噩梦,特别是如果您想稍后维护它并更改规则。 java代码将来很容易理解和维护,但它会很长。
答案 1 :(得分:0)
我不敢尝试用XSLT来解决这个问题 - XSLT对于简单的基本转换很有用。虽然它可能会把它拉下来,但它可能会让你在这个过程中疯狂。
至于完全解决它:
现在,我希望你问“没有排序?” (因为它太贵了,无论如何)。答:您将以某种方式对数据进行排序。在内存中创建一个巨大的地图,并根据坐标添加元素是排序。这是不明显的。
[编辑] 也许这个技巧也可行:代替表格,使用div
和position: absolute
并缩放坐标,直到文本不再重叠。这将模拟一个表,但它是否适用于你取决于坐标是否实际意味着什么(即它们不是随机的,但其他一些系统使用它们来布置数据)