2013-07-20 67 views
0

我有以下代码:动态日期xquery-过滤

<Table><ColumnHeaders> 
<ColumnHeader name='Title' type='xs:string' /> 
<ColumnHeader name='EventDate' type='xs:date' /> 
<ColumnHeader name='today' type='xs:date' /> 
<ColumnHeader name='day-week' type='xs:integer' /> 
<ColumnHeader name='dur-end' type='xs:integer' /> 
<ColumnHeader name='start-date' type='xs:date' /> 
<ColumnHeader name='end-date' type='xs:date' /> 
</ColumnHeaders> 
<Data>{let $today := fn:current-date() 
let $day-week := functx:day-of-week($today) 
let $dur-end := 6-$day-week 
let $start-date := xs:date($today)-(xs:dayTimeDuration('P1D')*$day-week) 
let $end-date := xs:date($today)+(xs:dayTimeDuration('P1D')*$dur-end) 
for $ancestor0 in $queryresponse//*:row 
where ($ancestor0/@ows_EventDate)>=$start-date 
return<Row> 
<Title>{fn:data($ancestor0/@ows_Title)}</Title> 
<EventDate>{fn:data($ancestor0/@ows_EventDate)}</EventDate> 
<today>{fn:data($today)}</today> 
<day-week>{fn:data($day-week)}</day-week> 
<dur-end>{fn:data($dur-end)}</dur-end> 
<start-date>{fn:data($start-date)}</start-date> 
<end-date>{fn:data($end-date)}</end-date> 
</Row>} 
</Data></Table> 

中加入了“声明” where子句之后,XQuery的失败,出现以下错误:

ZorbaDynamicException失败。 Zorba引擎遇到动态错误。 错误类型:XQuery引擎错误。通过的项目(类型UNTYPED_ATOMIC)不能转换为传递目标类型(xs:date)。

有人能帮我解决这个问题吗?

+0

我已经在[您的原始问题的答案]中描述过(http://stackoverflow.com/questions/17738471/xquery-to-get-the-date-values-in-current-week):日期您所拥有的代表与XQuery日期不兼容,因此您必须将其转换。 –

+0

嗨, 我是Xquery的新手,实际上我不明白你对我原来的帖子的回答,我感到不自在地要求你详细解释它。这就是为什么我尝试了我自己的逻辑,但不幸的是它并没有起作用。如果你有一些时间,你可以请尝试解释一下细节? 此外,如果有任何xquery书,你会建议初学者,这将是伟大的。 Regards, – Jude

+0

哪部分你不明白?我承认,如果您不习惯使用声明性语言,那么学习XQuery一开始并不容易。我不能帮你提供一本书的建议,我在一次大学讲座中学到了它。目前的问题是你的日期格式不是标准的ISO日期格式,因此需要对齐,我在我的答案中使用正则表达式解决了这个问题。 –

回答