2009-06-15 24 views
2

考慮下面的代碼檢查空日期:如何在XQuery函數中檢查空的日期參數?

declare xqse function tns:isEmptyDate($dob as xs:date) as xs:boolean { 
    if(empty($dob)) then { 
    } 
} 

執行時,爲什麼會在ALDSP以下錯誤:

weblogic.xml.query.exceptions.XQueryDynamicException: {err}XP0021: "": can not cast to {http://www.w3.org/2001/XMLSchema}date: error: date: Invalid date value: wrong type:

回答

0

我只是完成用XQuery修飾,但我懷疑錯誤正在產生,因爲函數簽名($dob as xs:date)需要日期類型,並且你正在傳遞其他東西,例如一個空值。

2

好了,我一看這個,我想你就可以運行查詢通過定義功能

declare function tns:isEmptyDate($dob as xs:date?) as xs:boolean 

注意的?類型之後 - 這意味着參數可能是空序列。

我在氧氣中使用Saxon-B測試了這個...抱歉,我沒有權限訪問您正在使用的軟件。

這是我的函數定義。

declare function tns:isEmptyDate($dob as xs:date?) as xs:boolean { 
    let $empty := if (empty($dob)) 
     then true() 
     else false() 
    return $empty 
}; 

運行鍼對該文件:

<?xml version="1.0" encoding="UTF-8"?> 
<datetime>2002-09-24</datetime> 

返回true,以及對這個文件運行:

<?xml version="1.0" encoding="UTF-8"?> 
<dontmatch>2002-09-24</dontmatch> 

返回false。

運行沒有問號相同的功能,在第二份文件有錯誤:

嚴重錯誤。說明:不允許空序列作爲tns的第一個參數:isEmptyDate()

0

在類型聲明後嘗試使用問號或星號。

例如,

$ DOB爲XS:日期 裝置$ DOB是1項的序列(類型xs:日期)

$ DOB爲XS:日期? 裝置$ DOB是1個或無項目(其中的每一個都是類型xs:日期)的序列

$ DOB爲XS:日期* 裝置$ DOB是無或多個項目(的序列的每一個是類型xs:date)

1

使用函數empty()而不是編寫自己的函數。如果一個序列的計數爲零,Empty將返回true,其中xs:date?可以是長度爲零或一個的序列。