如何使用xquery接收时间范围内的xml节点

时间:2015-10-26 15:26:20

标签: date 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 个答案:

答案 0 :(得分:1)

问题在于,您正在迭代基数为1的EventList文档,同时选择$b/SFEvents/EventList/Event/TimeStamp/data(),一系列TimeStamp值,并将其分配给变量期望单一价值。您的查询还会返回EventList,但您说要返回Event s。

有几种方法可以做到这一点,但是现有查询的最简单方法是简单地迭代Event元素,选择单个TimeStamp值,然后返回选中的{{ 1}}秒。

Event