При использовании функции 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 элемента.

Другие вопросы по тегам