如何使用xquery在一个时间范围内接收xml个节点
How to receive xml nodes inside a time range by using xquery
我有一个 xml,里面有类似的东西
<SFEvents>
<EventList>
<Event>
<ID>1111</ID>
<Type>Measurement</Type>
<TimeStamp>2015-09-28T09:50:27.514</TimeStamp>
<Space>Main_area</Space>
<SourceID>Thermometer_3</SourceID>
<Content>
<Measurement>
<!-- From B2MML standard (OpSegmentDataType) -->
<ID/>
<Description>Temperature of a power resistance</Description>
<Value>
<ValueString>100</ValueString>
<UnitOfMeasure>oC</UnitOfMeasure>
</Value>
</Measurement>
</Content>
</Event>
<Event>..</Event>
...
</EventList>
有很多事件,我目前尝试使用 xquery 接收时间戳在某个时间范围内的所有事件节点
我用这个代码
all_xmls_String=session.execute("xquery for $b in doc('CIDEMdb/CIDEM.xml')
let $date_string as xs:string :=$b/SFEvents/EventList/Event/TimeStamp/data()
let $date as xs:dateTime := xs:dateTime($date_string)
where $date ge xs:dateTime('"+startdate+"') and $date le
xs:dateTime('"+enddate+"') return $b/SFEvents/EventList");
但是我收到这个错误
无法将 xs:untypedAtomic+ 转换为 xs:string: ("2015-09-28T09:50:27.514", ...).
有什么想法吗?
问题是您正在遍历基数为 1 的 EventList
文档,而 selecting $b/SFEvents/EventList/Event/TimeStamp/data()
一系列 TimeStamp
值,并将其分配给需要单个值的变量。您的查询也 returns 和 EventList
,但您说您想要 return Event
s.
有几种方法可以做到这一点,但是给定现有查询的最简单方法是简单地遍历 Event
元素,select 单个 TimeStamp
值,并且然后 return selected Event
s。
for $b in doc('CIDEMdb/CIDEM.xml')//SFEvents/EventList/Event
let $date_string as xs:string :=$b/TimeStamp/data()
let $date as xs:dateTime := xs:dateTime($date_string)
where $date ge xs:dateTime('"+startdate+"') and $date le xs:dateTime('"+enddate+"')
return $b
我有一个 xml,里面有类似的东西
<SFEvents>
<EventList>
<Event>
<ID>1111</ID>
<Type>Measurement</Type>
<TimeStamp>2015-09-28T09:50:27.514</TimeStamp>
<Space>Main_area</Space>
<SourceID>Thermometer_3</SourceID>
<Content>
<Measurement>
<!-- From B2MML standard (OpSegmentDataType) -->
<ID/>
<Description>Temperature of a power resistance</Description>
<Value>
<ValueString>100</ValueString>
<UnitOfMeasure>oC</UnitOfMeasure>
</Value>
</Measurement>
</Content>
</Event>
<Event>..</Event>
...
</EventList>
有很多事件,我目前尝试使用 xquery 接收时间戳在某个时间范围内的所有事件节点
我用这个代码
all_xmls_String=session.execute("xquery for $b in doc('CIDEMdb/CIDEM.xml')
let $date_string as xs:string :=$b/SFEvents/EventList/Event/TimeStamp/data()
let $date as xs:dateTime := xs:dateTime($date_string)
where $date ge xs:dateTime('"+startdate+"') and $date le
xs:dateTime('"+enddate+"') return $b/SFEvents/EventList");
但是我收到这个错误 无法将 xs:untypedAtomic+ 转换为 xs:string: ("2015-09-28T09:50:27.514", ...).
有什么想法吗?
问题是您正在遍历基数为 1 的 EventList
文档,而 selecting $b/SFEvents/EventList/Event/TimeStamp/data()
一系列 TimeStamp
值,并将其分配给需要单个值的变量。您的查询也 returns 和 EventList
,但您说您想要 return Event
s.
有几种方法可以做到这一点,但是给定现有查询的最简单方法是简单地遍历 Event
元素,select 单个 TimeStamp
值,并且然后 return selected Event
s。
for $b in doc('CIDEMdb/CIDEM.xml')//SFEvents/EventList/Event
let $date_string as xs:string :=$b/TimeStamp/data()
let $date as xs:dateTime := xs:dateTime($date_string)
where $date ge xs:dateTime('"+startdate+"') and $date le xs:dateTime('"+enddate+"')
return $b