Search code examples
xpathxquery

How to substitute the name of a node for a variable in a xquery search


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.


Solution

  • You can use doc($CLIENTS)/Root/Item[contains(@*[local-name() = $options/node-name], $search)].