При использовании функции xquery "functx: Между-включительно", возможно ли, чтобы первый аргумент пришел из 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
Вышеупомянутый xquery хорошо работает, когда все $xval (текстовый элемент svg) имеют атрибут @x. Тем не менее, некоторые $xval имеют @transform="matrix(0 -1 1 0 248.402 118.972)", где значение x является 5-й позицией матрицы.
Возможно ли, чтобы первый аргумент функции functx: Между включенными исходил из двух разных значений атрибутов?
Есть ли способ лучше?
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 элемента.