0

在其中一个 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>)
      }     

 }

这是运行时出现的异常。

运行时异常:java.lang.reflect.InvocationTargetException

所以想请教前辈和大神们,那段Xquery代码是否正确?

提前非常感谢。

4

1 回答 1

2

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

  • let子句必须是FLWOR表达式的一部分,该表达式始终以return子句结尾。
  • if不能在没有thenelse不使用花括号的情况下使用。
  • 开始标签在查询结束时<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>
于 2013-05-31T12:37:26.637 回答