我有一个像这样的内容的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”,...)。
有什么想法吗?
答案 0 :(得分:1)
问题在于,您正在迭代基数为1的EventList
文档,同时选择$b/SFEvents/EventList/Event/TimeStamp/data()
,一系列TimeStamp
值,并将其分配给变量期望单一价值。您的查询还会返回EventList
,但您说要返回Event
s。
有几种方法可以做到这一点,但是现有查询的最简单方法是简单地迭代Event
元素,选择单个TimeStamp
值,然后返回选中的{{ 1}}秒。
Event