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]
                ]

このXQueryが提供された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>

必要な正しい結果が生成されます。

<entry date="2012-10-09T14:19:23">...</entry>
于 2012-12-25T20:01:13.873 に答える
0

さて、ようやく私はそれがうまくいくことに気づきましたlet $entries := //entry[(xs:dateTime(./@date/string()) ge $dateBegin) and (xs:dateTime(./@date/string()) le $dateEnd)]。それでも、より良い解決策が存在するかどうか疑問に思っています。

于 2012-12-25T19:26:02.863 に答える
0

コレクションに定義されたentry/@ date属性にrange-indexがありますか?そうでない場合は、クエリが高速化されると思います。

于 2013-02-24T12:53:28.813 に答える