如何使用xQuery合并两个相同格式的xml文件,以便按时间戳对合并的文件进行排序?

时间:2018-12-12 16:08:23

标签: xml xquery

我有两个xml文件,它们都包含多个<Message>元素,如下所示:

<!--CodeSite Log File-->
<!--Created on 12 December 2018 13:58:52 -->
<CodeSiteLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CodeSiteLogFile.xsd">
. . .
  <Message MsgType="Enter" MsgText="CStore">
    <TimeStamp Date="2018-12-11" Time="11:10:40.860" TimeBias="0"/>
    <ProcessID>7688</ProcessID>
    <ThreadName>7</ThreadName>
    <AppName>spoolsv</AppName>
    <ComputerName>W10-X64-BPT</ComputerName>
    <Category Color="clWhite" FontColor="clBlack"></Category>
    <TypeName></TypeName>
  </Message>
. . .
</CodeSiteLog>

我的问题是,如何使用xQuery将这两个xml文件合并到一个按TimeStamp升序排序的xml文件中?我已经能够合并这两个文件,但是我从第一个xml文件中获取所有消息,然后从第二个xml文件中获取所有消息,而不是通过递增时间戳来排序。

我目前得到一个看起来像这样的合并文件,其中前两个消息来自第一个文件,其余消息来自第二个文件:

<?xml version="1.0" encoding="UTF-8"?>
<results>
  <result MsgText="message from first log" MsgType="Info" Time="11:10:40.858"/>
  <result MsgText="message from first log" MsgType="Info" Time="11:10:41.778"/>
  <result MsgText="message from second log" MsgType="Info" Time="11:10:30.791"/>
  <result MsgText="message from second log" MsgType="Info" Time="11:10:30.801"/>
  . . .
</results>

但是合并文件中的消息不再按时间戳排序。

1 个答案:

答案 0 :(得分:1)

本质上,

for $m in (doc('a.xml'), doc('b.xml'))//Message
order by $m/Timestamp/dateTime(@Date, @Time)
return $m