Soap If条件后跟for循环,在Xquery中不执行

Soap If条件后跟for循环,在Xquery中不执行,soap,xquery,soapui,soap-client,xquery-sql,Soap,Xquery,Soapui,Soap Client,Xquery Sql,在其中一个SOAP响应中,我尝试使用以下Xquery代码检查一个条件,然后是for循环。我试图获得某个元素的计数,然后使用if条件,并基于该if条件,它应该执行for循环。然而,出现了一个例外 这是我在soapui中的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-0

在其中一个SOAP响应中,我尝试使用以下Xquery代码检查一个条件,然后是for循环。我试图获得某个元素的计数,然后使用if条件,并基于该if条件,它应该执行for循环。然而,出现了一个例外

这是我在soapui中的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>)
      }     

 }
声明变量$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-01-04.00”);
{
let$mcId1:=count(//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[1]/mL)
let$mcId2:=count(//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[2]/mL)
如果($mcId1=8)
{
对于//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[1]/interval/mL中的$mlList
返回(如果($mcId1>$mcId2)
那是真的
否则为假)
}     
}

以下是在运行时出现的异常

RuntimeException:java.lang.reflect.InvocationTargetException

因此,我想征求前辈和大师的意见,如果这段Xquery代码是正确的


非常感谢。您的查询中有多个语法错误:

  • let
    子句必须是FLWOR表达式的一部分,该表达式始终以
    return
    子句结尾
  • 如果没有
    就不能使用
    ,那么
    else
    就不能使用大括号
  • 开始标记
    需要在查询结束时匹配结束标记
更正后的查询如下所示:

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>
声明变量$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"
);
{
let$mcId1:=count(//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[1]/mL)
let$mcId2:=count(//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[2]/mL)
如果($mcId1=8),则返回(
对于//ZZQAD2UsageTransactionSVC/usagePeriods/usagePeriodsList/SQs/SQsList[1]/interval/mL中的$mlList
如果($mcId1>$mcId2)返回
那是真的
否则错误
)else()
}