根据我有这个XML文件的事实:
<entries>
<entry date="2012-10-09T12:09:09">...</entry>
<entry date="2012-10-09T14:19:23">...</entry>
...
<entry date="2012-10-13T00:00:00">...</entry>
</entries>
$dateBegin := '2012-10-09T13:00:00'
和$dateEnd := '2012-10-12T00:00:00'
。我正在寻找一种有效的方法来获取$ dateBegin和$ dateEnd之间的条目,任何想法?
答案 0 :(得分:1)
使用Rob(OP)确认的事实,entry
元素显示在XML文档中排序,这可能更快:
for $dateBegin in xs:dateTime('2012-10-09T13:00:00'),
$dateEnd in xs:dateTime('2012-10-12T00:00:00')
return
/*/*[xs:dateTime(@date) ge $dateBegin
and
. << /*/*[xs:dateTime(@date) gt $dateEnd][1]
]
根据提供的XML文档评估此XQuery时:
<entries>
<entry date="2012-10-09T12:09:09">...</entry>
<entry date="2012-10-09T14:19:23">...</entry>
...
<entry date="2012-10-13T00:00:00">...</entry>
</entries>
产生了想要的正确结果:
<entry date="2012-10-09T14:19:23">...</entry>
答案 1 :(得分:0)
好的,最后我意识到let $entries := //entry[(xs:dateTime(./@date/string()) ge $dateBegin) and (xs:dateTime(./@date/string()) le $dateEnd)]
有效。仍然想知道是否存在更好的解决方案。
答案 2 :(得分:0)
您是否为集合定义的entry / @ date属性有一个范围索引?如果不是,我相信这会加快查询速度。