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

上記の xquery は、すべての $xval (svg テキスト要素) に @x 属性がある場合にうまく機能します。ただし、一部の $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に両方の値のシーケンスが割り当てられ、最初の値のみが選択されます。最初の値が空の場合、2 番目の値が 1 項目シーケンスの最初の値になるため、選択されます。

于 2016-10-27T21:33:17.390 に答える