Я пытаюсь запросить существующий db с помощью xquery, беря параметры из URL-адреса и создавая параметры поиска
xquery version "1.0";
declare namespace request="http://exist-db.org/xquery/request";
declare namespace xs="http://www.w3.org/2001/XMLSchema";
declare option exist:serialize "method=xml media-type=text/xml omit-xml-declaration=no indent=yes";
let $param1:= request:get-parameter("param1",'0')
let $person :=
if($param1 = '0')
then "'*'"
else concat('contributions/person/@val="',$param1,'"')
return
<xml>
{
for $x in subsequence(//foo/bar[$person],1,3)
return $x
}
</xml>
Приведенный выше код показывает, что я получаю параметр из url $ param1.
переменная $ person проверяет наличие параметра и на основе этого создает параметр запроса. Эта переменная работает нормально, при тестировании она выводит либо '*' без параметра, либо
contributions/person/@val='hello, world'
Когда я запускаю запрос, он распечатывается, как если бы значение было «*». Могу ли я передать такую переменную в части for $ x? Я пробовал поставить concat ($ person, '') с теми же результатами. Жесткое кодирование полного пути дает мне результаты, которые я ищу, но я хочу создать что-то более динамичное.
Примечание: есть только одна переменная, $ person, но будут и другие, как только я заставлю ее работать.