2013-05-31 42 views
0

在其中一個SOAP響應中,我試圖使用以下Xquery代碼來檢查條件,然後是for循環。我試圖獲得一些元素的計數,然後使用if條件並基於該條件,它應該執行for循環。但是有一個例外。如果條件後面跟着for循環在Xquery中不執行

這是我在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代碼是正確的?

非常感謝。

回答

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>