我正在使用以下代码。它运作得很好。
<GetListItemChanges xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>States At A Glance</listName>
<viewFields></viewFields>
<since>2013-08-29T 19:52:52Z</since>
<contains></contains>
</GetListItemChanges>
我希望自标签中的日期时间是动态的。所以,我使用下面的xquery函数来计算它:
declare variable $Y := fn:concat(fn:substring(fn:string(fn:current-dateTime() - xs:dayTimeDuration('P30D')),1,11), ' ', fn:substring(fn:string(fn:current-dateTime() - xs:dayTimeDuration('P30D')),12,8), 'Z');
我测试了$ Y的值,它正是 - 我想要的。
但是,当我用$ Y替换日期值时,代码开始出错:
let $soap-payload := ('<GetListItemChanges xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>States At A Glance</listName>
<since>{fn:data($Y)}</since>
</GetListItemChanges>')
错误消息:
axis2_svc_client_send_receive失败。 Web Service返回了soap故障。 错误类型:XQuery Engine错误。 soap:抛出了类型为“Microsoft.SharePoint.SoapServer.SoapServerException”的ReceiverException ..
答案 0 :(得分:0)
您显示的代码不会执行替换。变量$soap-payload
不包含XML,而是包含字符串。不会评估字符串内的XQuery表达式。如果从$soap-payload
中删除单引号,则将评估XQuery表达式。
如果您需要$soap-payload
作为字符串,可以通过字符串连接来构建它,或者您可以序列化XML。其机制取决于您的XQuery处理器(和版本)。
fn:serialize()
xdmp:quote()
saxon:serialize()
连接示例
XQuery 1.0
let $soap-payload :=
fn:concat(
'<GetListItemChanges xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>States At A Glance</listName>
<since>',
fn:concat(
$Y,
'</since>
</GetListItemChanges>'))
XQuery 3.0
let $soap-payload :=
'<GetListItemChanges xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>States At A Glance</listName>
<since>' || $Y || '</since>
</GetListItemChanges>'
序列化示例
let $soap-payload-xml :=
<GetListItemChanges xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>States At A Glance</listName>
<since>{ $Y }</since>
</GetListItemChanges>
let $soap-payload := fn:serialize($soap-payload-xml)