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

发布于 2024-11-30 12:15:54 字数 1471 浏览 0 评论 0原文

我相信我有一个非常有趣的问题需要解决。我有一个类似这样的 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 表格。 TR 和 TD 的内容需要根据 XML 的 xpos 和 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 解析器?或者其他什么?又如何?

I believe I have a very interesting problem to solve. I've a XML something like this :

<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" />

The positions of the elements in the xml may not be sequential.

I've to convert this into a HTML table. The contents of the TRs and TDs need to be "dynamically" set based on xpos and ypos attributes of the XML .. output should be something like this :

<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>

Things get more complicated when the xpos or ypos are not exactly same, but slightly different for 2 adjoining elements ..
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>

Any ideas how do I achieve this ? using xslt or Java/Javascript dom parser ? or anything else ? and how ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦旅人picnic 2024-12-07 12:15:54

我不敢尝试使用 XSLT 来解决这个问题 - XSLT 适合简单、基本的转换。虽然有可能成功,但在这个过程中可能会让你发疯。

至于完全解决它:

  1. 使用舍入或类似的方法来解决“相差 1/2”问题
  2. 对数据进行排序。
  3. 用排序后的数据创建一个表应该很简单

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

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

I wouldn't dare to attempt to solve this with XSLT - XSLT is good for simple, basic transformations. While it might be possible to pull it off, it will probably drive you insane in the process.

As for solving it at all:

  1. Use rounding or similar methods to solve the "off by 1/2" problem
  2. Sort the data.
  3. Creating a table out of the sorted data should be trivial

Now, I expect you to ask "and without sorting?" (because it's too expensive, whatever). Answer: You will sort the data, one way or another. Creating a huge map in memory and add elements to it based on the coordinate is sorting. It's just non-obvious.

[EDIT] Maybe this trick will also work: Instead of a table, use div with position: absolute and scale the coordinates until the texts no longer overlap. That will emulate a table but whether it works for you depends on whether the coordinates actually mean something (i.e. they aren't random but some other system uses them to lay out the data)

誰ツ都不明白 2024-12-07 12:15:54

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

the easiest is to write small java code that parse it and translate it to the desired format.
It is very complicated to do it with xslt.
actually it is a nightmare to do it with xslt, specially if you want to maintain it later and change the rules.
java code will be easy to understand and maintainable for the future, but it is going to be long.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文