1

根据我有这个 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 之间的条目,知道吗?

4

3 回答 3

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>
于 2012-12-25T20:01:13.873 回答
0

您是否在为集合定义的 entry/@date 属性上有一个范围索引?如果不是,我相信这会加快查询速度。

于 2013-02-24T12:53:28.813 回答
0

好的,所以最后我意识到这是let $entries := //entry[(xs:dateTime(./@date/string()) ge $dateBegin) and (xs:dateTime(./@date/string()) le $dateEnd)]可行的。仍然想知道是否存在更好的解决方案。

于 2012-12-25T19:26:02.863 回答