在其中一个SOAP响应中,我试图使用以下Xquery代码来检查后跟for循环的条件。我试图得到一些元素的计数然后使用if条件并基于if条件,它应该执行for循环。但是会出现例外情况。
这是我在SOAP UI中的Xquery位。
declare variable $datesList := ("2013-01-01-00.30.00","2013-01-01-01.00.00","2013-01-01-01.30.00","2013-01-01-02.00.00","2013-01-01-02.30.00","2013-01-01-03.00.00","2013-01-01-03.30.00","2013-01-01-04.00.00");
<res>
{
let $mcId1 :=count(//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[1]/mL)
let $mcId2 :=count(//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[2]/mL)
if($mcId1=8)
{
for $mlList in //ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[1]/intervals/mL
return(if($mcId1 > $mcId2)
then <text>true</text>
else <text>false</text>)
}
}
以下是运行时出现的异常。
的RuntimeException:java.lang.reflect.InvocationTargetException
所以如果Xquery代码是正确的话,我想向老年人和大师们寻求建议吗?
非常感谢。
答案 0 :(得分:2)
您的查询中存在多个语法错误:
let
子句必须是 FLWOR 表达式的一部分,该表达式始终以return
子句结尾。if
和then
,则无法使用else
,并且不使用大括号。<res>
在查询结尾处需要匹配的结束标记</res>
。更正的查询如下所示:
declare variable $datesList := (
"2013-01-01-00.30.00", "2013-01-01-01.00.00",
"2013-01-01-01.30.00", "2013-01-01-02.00.00",
"2013-01-01-02.30.00", "2013-01-01-03.00.00",
"2013-01-01-03.30.00", "2013-01-01-04.00.00"
);
<res>{
let $mcId1 := count(//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[1]/mL)
let $mcId2 := count(//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[2]/mL)
return if($mcId1 = 8) then (
for $mlList in //ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[1]/intervals/mL
return if($mcId1 > $mcId2)
then <text>true</text>
else <text>false</text>
) else ()
}</res>