【发布时间】:2012-02-07 17:02:42
【问题描述】:
根据 Dimitre Novatchev 的要求,我创建了一个新问题,因为旧问题的某些部分发生了变化。
(旧问题链接:Merging two different XML log files (trace and messages) using date and timestamp?)
我需要合并两个 XML 日志文件(最大 700MB)。一个日志文件包含带有位置更新的跟踪。另一个日志文件包含收到的消息。可以有多个接收到的消息,中间没有位置更新,反之亦然。
两个日志都有时间戳,包括毫秒(本例中为 123):
- 跟踪日志使用
(例如 14.7.2012 11:08:07.123) - 消息日志使用 unix 时间戳
(例如 1342264087123)
消息日志中还包含其他
以下结构略有简化,因为省略了“加速”等附加内容。只需将这些附加内容与其余消息/项目一起复制即可。
位置轨迹的结构如下:
<itemList>
<item>
<date>14.7.2012 12:13:05.123</date>
<FilteredPosition>
<Latitude>51.12235</Latitude>
<Longitude>9.347214</Longitude>
</FilteredPosition>
</item>
<item>
<date>14.7.2012 12:13:07.456</date>
<FilteredPosition>
<Latitude>51.12235</Latitude>
<Longitude>9.347214</Longitude>
</FilteredPosition>
</item>
</itemList>
消息日志的结构是这样的:
<messageList>
<Message>
<messageId>1234</messageId>
<originator>
<originatorPosition>
<nodeId>2345</nodeId>
<timeStamp>1342264087061</timeStamp>
</originatorPosition>
<senderPosition>
<nodeId>2345</nodeId>
<timeStamp>1342264087234</timeStamp>
</senderPosition>
<medium></medium>
</originator>
<MessagePayload>
<generationTime>
<timeStamp>1342264087</timeStamp>
<milliSec>42</milliSec>
</generationTime>
</MessagePayload>
</Message>
<Message>
<messageId>1234</messageId>
<originator>
<originatorPosition>
<nodeId>2345</nodeId>
<timeStamp>1342264088064</timeStamp>
</originatorPosition>
<senderPosition>
<nodeId>2345</nodeId>
<timeStamp>1342264088254</timeStamp>
</senderPosition>
<medium></medium>
</originator>
<MessagePayload>
<generationTime>
<timeStamp>1342264088</timeStamp>
<milliSec>42</milliSec>
</generationTime>
</MessagePayload>
</Message>
</messageList>
在进行合并时,应读取时间戳(还转换/比较“日期”和“时间戳”,包括格式为“14.7.2012 11:08:07.123”的毫秒),并在右侧添加所有位置和消息顺序。
位置数据可以直接添加。但是,消息应该放在
结果可能如下所示:
<itemList>
<item>
<date>14.7.2012 12:13:05.123</date>
<FilteredPosition>
<Latitude>51.12235</Latitude>
<Longitude>9.347214</Longitude>
</FilteredPosition>
</item>
<item>
<date>14.7.2012 12:13:07.061</date>
<m:Message type="received">
<messageId>1234</messageId>
<originator>
<originatorPosition>
<nodeId>2345</nodeId>
<timeStamp>1342264087061</timeStamp>
</originatorPosition>
<senderPosition>
<nodeId>2345</nodeId>
<timeStamp>1342264087234</timeStamp>
</senderPosition>
<medium></medium>
</originator>
<MessagePayload>
<generationTime>
<timeStamp>1342264087</timeStamp>
<milliSec>63</milliSec>
</generationTime>
</MessagePayload>
</m:Message>
</item>
<item>
<date>14.7.2012 12:13:07.456</date>
<FilteredPosition>
<Latitude>51.12235</Latitude>
<Longitude>9.347214</Longitude>
</FilteredPosition>
</item>
<item>
<date>14.7.2012 12:13:08.064</date>
<m:Message type="received">
<messageId>1234</messageId>
<originator>
<originatorPosition>
<nodeId>2345</nodeId>
<timeStamp>1342264088064</timeStamp>
</originatorPosition>
<senderPosition>
<nodeId>2345</nodeId>
<timeStamp>1342264088254</timeStamp>
</senderPosition>
<medium></medium>
</originator>
<MessagePayload>
<generationTime>
<timeStamp>1342264088</timeStamp>
<milliSec>70</milliSec>
</generationTime>
</MessagePayload>
</m:Message>
</item>
<itemList>
还有一些
感谢任何有关 XSLT 代码的帮助,因为我对这个主题还很陌生...:-/
【问题讨论】:
-
您知道您是否受限于 XSLT 1.0,还是可以选择 2.0?