I run this query successfully:
declare variable $CLIENTS as xs:string := '/resources/lists/clients.xml';
let $options := <options><node-name>Client</node-name></options>
let $search := '56385'
let $items :=
if ($options/node-name = 'Client') then
doc($CLIENTS)/Root/Item[contains(@Client, $search)]
else
if ($options/node-name = 'Name') then
doc($CLIENTS)/Root/Item[contains(@Name, $search)]
else
doc($CLIENTS)/Root/Item[contains(@Pub, $search)]
return $items/@Client
However, I would like to replace the attribute name with a variable so that I can pass the name as a parameter. By example:
let $items :=
doc($CLIENTS)/Root/Item[contains(...$options/node-name..., $search)]
This way I can search for any node without modifying the code.
Thanks.
You can use doc($CLIENTS)/Root/Item[contains(@*[local-name() = $options/node-name], $search)]
.