0

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

有没有更好的办法?

4

1 回答 1

1

从您的问题看来,您希望始终在不可用@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 项序列中的第一个值。

于 2016-10-27T21:33:17.390 回答