По просьбе Дмитрия Новатчева я создал новый вопрос, так как некоторые части старого вопроса изменились.
(ссылка на старый вопрос: Объединение двух разных файлов журнала XML (трассировка и сообщения) с использованием даты и метки времени? )
Мне нужно объединить два файла журнала XML (до 700 МБ). Один файл журнала содержит трассировку с обновлениями позиции. Другой файл журнала содержит полученные сообщения. Может быть несколько полученных сообщений без промежуточного обновления позиции и наоборот.
Оба журнала имеют метки времени, включая миллисекунды (123 в этом примере):
- В журнале трассировки используется (например, 14.7.2012 11: 08: 07.123)
- В журнале сообщений используется метка времени Unix (например, 1342264087123)
Существуют также другие элементы , включенные в журнал сообщений, но релевантен только один элемент в пути messageList / Message / originator / originatorPosition / timeStamp.
Следующие структуры немного упрощены, так как дополнительный контент, такой как «ускорение» и т. Д., Не включен Этот дополнительный контент просто необходимо скопировать вместе с остальными сообщениями / элементами.
Структура трассы положения выглядит следующим образом:
<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»), а все позиции и сообщения добавляются справа. заказ.
Данные о местоположении могут быть просто добавлены как есть. Тем не менее, сообщение должно быть помещено в теги , тег должен быть добавлен (на основе времени unix сообщений с миллисекундами), а тег должен быть заменен на теги. Элементы помещаются в корень , как это было с трассировкой позиции.
Результат может выглядеть так:
<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>
Есть также некоторые элементы , которые не содержат метки времени (и не имеют «FilteredPosition») внутри файла журнала положения. Эти элементы можно игнорировать и их не нужно копировать.
Буду признателен за любую помощь с XSLT-кодом, так как я совсем новичок в этой теме ...: - /