使用 xquery 函数 "functx:between-inclusive" 时,第一个参数是否可能来自 2 个不同的属性值?

When using the xquery function "functx:between-inclusive", is it possible for the first argument to come from 2 different attribute values?

我正在使用 xquery 搜索源 xml 文件中的值并将其与 svg 文件进行比较。 这是我的 xquery:

for $xval in $figure/graphic/sheet/doc(@svgsrc)//*[text() = $rdi/text()],   
    $line in $figure/graphic/sheet/doc(@svgsrc)/svg/line   
where functx:between-inclusive($xval/@x, $line/@x2, $line/@x1) 
return $line/@class

当所有$xval(svg 文本元素)都具有@x 属性时,上述xquery 运行良好。但是,某些 $xval 具有 @transform="matrix(0 -1 1 0 248.402 118.972)",其中 x 值是矩阵的第 5 个位置。

functx:between-inclusive 的第一个参数是否可能来自 2 个不同的属性值?

有没有更好的方法?

根据您的问题,您似乎希望在 @x 不可用时始终 select @transform 值:

for $xval in $figure/graphic/sheet/doc(@svgsrc)//*[text() = $rdi/text()],   
    $line in $figure/graphic/sheet/doc(@svgsrc)/svg/line   
let $x := ($xval/@x, xs:double(tokenize($xval/@transform, '\s')[5]))[1]
where functx:between-inclusive($x, $line/@x2, $line/@x1) 
return $line/@class

这将为变量 $x 分配两个值的序列,select 仅分配第一个值。如果第一个值为空,则 select 编辑第二个,因为它将是单项序列中的第一个值。