我使用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项序列中的第一个值。