2

我正在使用 XQuery 从 Sharepoint 中提取数据。xquery 代码是:

{for $ancestor0 in $queryresponse//*:row
return<Row>
<Title>{fn:data($ancestor0/@ows_Title)}</Title>
<EventDate>{fn:data($ancestor0/@ows_EventDate)}</EventDate>

返回的数据是:

<h1>Meeting Agenda  Event Date</h1>
New England APCD Work Group 6/26/2013  
NY APD Workgroup    6/27/2013  
MCDB 2012 Data Submission Bi-weekly 7/2/2013  
MA APCD 7/3/2013  
VA APCD Monthly Status  7/4/2013  
Cross State Meeting 7/5/2013  
NY APD Workgroup    7/11/2013  
MA APCD 7/17/2013  
Cross State Meeting 7/19/2013  
NY APD Workgroup    7/25/2013  
MA APCD 7/31/2013  
New England APCD Work Group 7/31/2013  
VA APCD Monthly Status  8/1/2013  
Cross State Meeting 8/2/2013

我需要获取当前周的行吗?所以我只会得到以下行作为结果:

MA APCD 7/17/2013  
Cross State Meeting 7/19/2013

有人可以帮我写代码吗?

4

1 回答 1

1

最后你需要解决两个问题。一个是解析这些日期,另一个是验证它们是否在本周。

测试日期是否在同一周

测试一天是否在当前周只是某一天是否在给定日期的同一周内的特例,即当前日。

declare function local:in-current-week($date as xs:date)
as xs:boolean
{
  local:in-same-week(current-date(), $date)
};

为了测试一天是否在给定的一周内,您需要找到一周的开始和结束。如果您知道星期几,就很容易找到一周的开始;并且可以通过从已知的一周开始计算天数来找到这一点(任意选择,让我们去 1912 年 6 月 23 日星期日)并使用除以一周长度的余数。

如果您希望星期从星期一开始,只需将日期更改为 1,我会选择 1938 年 1 月 10 日。

declare function local:in-same-week($date1 as xs:date, $date2 as xs:date)
as xs:boolean
{

  let $dayOfMonth := abs(($date1 - xs:date('1912-06-23')) div xs:dayTimeDuration('P1D') mod 7)
  let $startOfWeek := $date1 - $dayOfMonth * xs:dayTimeDuration('P1D')
  let $endOfWeek := $startOfWeek + 7 * xs:dayTimeDuration('P1D')
  return $startOfWeek <= $date2 and $date2 < $endOfWeek
};

local:in-current-week(xs:date('2013-07-17'))

构建xs:dateFrom US 日期格式

这仅涉及一个简单的正则表达式(适用于所有日期 AC。):

xs:date(replace('07/10/2013', '(\d{1,2})/(\d{1,2})/(\d+)', '$3-$1-$2'))

where最后,您可以通过将此子句添加到查询中来进行过滤:

where local:in-current-week(xs:date(replace(@ows_Title, '(\d{1,2})/(\d{1,2})/(\d{4})', '$3-$1-$2')))
于 2013-07-19T12:47:17.630 回答