【发布时间】:2012-02-02 17:03:19
【问题描述】:
我需要合并两个 XML 日志文件。一个日志文件包含带有位置更新的跟踪。另一个日志文件包含收到的消息。可以有多个接收到的消息,中间没有位置更新。
两个日志都有时间戳:
- 跟踪日志使用
(例如 14.7.2012 11:08:07) - 消息日志使用 unix 时间戳
(例如 1342264087)
trace 的结构如下:
<item>
<date>14.7.2012 11:08:07.222</date>
<MyPosition>
// Position data
</MyPosition>
</item>
<item>
<date>14.7.2012 12:13:07.112</date>
<MyPosition>
// Position data
</MyPosition>
</item>
...
消息的结构是这样的:
<Message>
// some content of the message
<subTag>
<timeStamp>1342264087</timeStamp>
</subTag>
// other content of the message
</Message>
<Message>
// same as above
</Message>
...
在进行合并时,应读取时间戳(同时转换/比较“日期”和“时间戳”)并以正确的顺序添加所有位置和消息。
位置数据可以直接添加。但是,消息应该放在
不幸的是不是一个“简单”的合并,尤其是日志文件的大小在 5 MB 到 700 MB 之间... :-/
结果可能如下所示:
<item>
<date>14.7.2012 11:08:07.222</date>
<MyPosition>
// Position data
</MyPosition>
</item>
<item>
<date>14.7.2012 11:09:10.867</date>
<m:Message type="received">
// content of the <Message>
</m:Message>
</item>
<item>
<date>14.7.2012 12:10:11.447</date>
<m:Message type="received">
// content of the former <Message>
</m:Message>
</item>
<item>
<date>14.7.2012 12:13:07.112</date>
<MyPosition>
// Position data
</MyPosition>
</item>
<item>
<date>14.7.2012 12:17:11.227</date>
<m:Message type="received">
// content of the former <Message>
</m:Message>
</item>
...
是否有任何工具支持这样的合并?或者有什么简单的方法可以用java解决这个问题?
我非常感谢有关如何解决此问题的任何提示。
【问题讨论】:
-
我会将它们转换为 excel 表或数据库表。然后你可以按日期/时间排序
-
这听起来像是 XSL 转换的工作,最好使用 XSLT2,因为它更擅长处理多个输入流。我已重新标记您的帖子以包含 XSLT。我的 XSLT 有点生疏了,但也许 SO 上的 XSLT 专家之一会看到并提供帮助。
-
我认为主要问题是unix时间戳和日期的比较以及添加包含转换时间戳的日期标签......这也可以使用xslt吗?我在这方面的知识非常有限。
-
是的,这一切都可以通过 XSLT 实现,但如果您根本不了解 XSLT,那么在没有帮助的情况下这项任务可能会令人生畏。如果您将标签改回来,我建议您至少添加 XSLT。标签
timestamp和logfiles充其量是边缘性的——你所拥有的是一个XML 合并任务,对于任何两个XML 文件都是一样的。
标签: xml xslt merge timestamp logfiles