我试图找出 xquery 中哪个价格值最小。我在 XML 中传递了两个价格值,并且在尝试比较这些值时似乎无法解决过去的语法错误。
示例 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: (err:XPST0003) Unexpected token syntax error, unexpected 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:min(20.0, 154.0) -- arg2 不是 xs:string 类型