如果Condition后跟一个for循环没有在Xquery中执行

时间:2013-05-31 11:46:58

标签: soap xquery soapui soap-client xquery-sql

在其中一个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代码是正确的话,我想向老年人和大师们寻求建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

您的查询中存在多个语法错误:

  • let子句必须是 FLWOR 表达式的一部分,该表达式始终以return子句结尾。
  • 如果没有ifthen,则无法使用
  • 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>