我有两个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>
但是合并文件中的消息不再按时间戳排序。
答案 0 :(得分:1)
本质上,
for $m in (doc('a.xml'), doc('b.xml'))//Message
order by $m/Timestamp/dateTime(@Date, @Time)
return $m