Мне нужно объединить два файла журнала XML. Один файл журнала содержит трассировку с обновлениями позиции. Другой файл журнала содержит полученные сообщения. Может быть несколько полученных сообщений без обновления позиции между ними.
Оба журнала имеют метки времени:
- В журнале трассировки используется (например, 14.7.2012 11:08:07)
- В журнале сообщений используется метка времени Unix (например, 1342264087)
Структура трассы выглядит следующим образом:
<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>
...
При объединении следует читать метки времени (также конвертируя / сравнивая «дату» и «метку времени»), а все позиции и сообщения добавляя в правильном порядке.
Данные о местоположении могут быть просто добавлены как есть. Однако сообщение должно быть помещено в теги , тег должен быть добавлен (в зависимости от времени unix сообщений), а тег должен быть заменен на теги.
К сожалению, это не "простое" объединение, особенно если размер файлов журнала лежит в диапазоне от 5 до 700 МБ ...: - /
Результат может выглядеть так:
<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?
Я очень ценю любые советы о том, как решить эту проблему.