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



我使用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个不同的属性值?

有更好的方法吗?

从你的问题听起来你总是想选择@transform值时,@x不可用:

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分配两个值的序列,只选择第一个值。如果第一个值为空,则选择第二个值,因为它将是1项序列中的第一个值。

最新更新