2016-05-23 49 views
0

我目前正在嘗試通過Java運行XQuery文件。由於我對XQuery非常陌生,不確定如何調試它。當我運行XQ時,出現以下錯誤:調試XQuery - XPTY0019錯誤

XQuery Processor異常:調用Saxon時出現異常:'/'的第一個操作數的必需項類型爲node();提供的值具有項目類型xs:anyAtomicType; SystemID:;行號:301;列#:-1;原因:第301行錯誤XPTY0019:'/'的第一個操作數的必需項目類型是node();提供的值有項目類型xs:anyAtomicType

現在我想知道我該如何針指向拋出錯誤的線?

編輯:

if ($ipItems) then (
    for $item in $ipItems 
     let $ipAddress := data ($item/nc:IpAddressList/nc:ipAddress) 

numurous嘗試後終於精確定位根casue到設命令,如果我將其刪除,代碼運行正常。你能不能讓我知道,我在那裏做錯了什麼。

回答

2

問題幾乎肯定是這條路徑表達式$item/nc:IpAddressList。問題是$item綁定到xs:anyAtomicType的值,而路徑表達式僅在節點上運行。您應該執行一些調試以查看$item在運行時的值。

1

我很難理解你爲什麼要這樣掙扎。您向我們展示的代碼片段大概在查詢的第301行左右。錯誤消息引用「/」運算符,並且查詢中只有兩個「/」運算符。第一個「/」運算符(A)的第一個操作數是$item,第二個「/」運算符(B)的第一個操作數是$item/nc:IpAddressList。如果B返回任何東西,它只能返回節點,所以它的靜態類型是node()*,所以B不是問題。所以問題必須是A. $item的項目類型與$ipItems的項目類型相同,因此錯誤消息告訴您$ipItems包含原子值而不是節點。如果可以確定$ipItems的值總是包含原子值,那麼撒克遜可能會在編譯時給你這個錯誤,或者如果運行時值是原子的,它可能在運行時給你錯誤。在這種情況下,我懷疑這是編譯時錯誤,因爲對於運行時錯誤,消息將更具體,例如,它會告訴你$ item可能是xs:decimal,或者是xs:date

在這個階段我們不能再幫你了,因爲我們需要看看$ipItems是如何初始化的。很可能,它被初始化爲一個只能是原子的值:一個例子可能是let $ipItems := distinct-values(xx/yy/zz)。一個原子值不能有一個名爲nc:IpAddressList的子元素,所以這永遠不會有意義。

+0

感謝您的投入,Micheal和Adam。 你的輸入都指向正確的方向。 這就是我穿越模式的方式,可以這麼說。成爲XQ的春季雞實在太難了! –