我試圖找出哪個價格值是xquery中最小的值。我有兩個以XML格式傳遞的價格值,在嘗試比較值時,我似乎無法通過語法錯誤。比較xquery中的兩個十進制值
示例XML:
<purchase>
....
<articlePrice>$20.00</articlePrice>
<issuePrice>$154.00</issuePrice>
....
</purchase>
我有下面去掉了 '$'
let $price := fn:substring-after($price, '$')
let $priceIssue := fn:substring-after($priceIssue, '$')
我試圖使用內置的FN:MIN(),但給「XDMP -UNEXPECTED :(錯誤:XPST0003)意外的標記語法錯誤,意外的QName_「。
fn:min(((xs:decimal($price)), (xs:decimal($priceIssue))))
伊夫試圖在if語句中同時使用「GT」和「>」,但仍然得到上述語法錯誤。
我可以解決這些錯誤的唯一方法是將它們轉換爲字符串,但比較錯誤。鑑於上述數據,作爲字符串,邏輯返回'154.00'小於'20.00',因爲'1'小於'2'。
我的確切的代碼:
let $price := if (xs:string($ecommerce/articlePrice)) then fn:substring-after(xs:string($ecommerce/articlePrice), '$') else ""
let $priceIssue := if (xs:string($ecommerce/issuePrice)) then fn:substring-after(xs:string($ecommerce/issuePrice), '$') else ""
let $priceDisplay := fn:min(xs:decimal($price), xs:decimal($priceIssue))
結果XDMP-ARGTYPE:(ERR:XPTY0004)FN:分鐘(20.0,154.0) - ARG2不是類型xs:串
在'$ priceDisplay'的表達式中['fn:min'](http://www.w3.org/TR/xquery-operators/#func-min)參數中缺少一對括號。正如它所寫的,它指的是雙參數版本,它有一個排序規則作爲第二個參數 - 因此是錯誤消息。相反,您需要單參數版本,將一系列值作爲參數傳遞,並且文字序列必須加上括號,除非它包含單個項目。另外請注意,您不能將空字符串轉換爲'xs:decimal',所以最好使用'else'表達式中的空序列,即'()'。 – Gunther