Как выбрать атрибут по переменной в xquery?

Я знаю, как выбрать такой атрибут:

$table/@id

Однако как мне это сделать, если имя атрибута хранится как переменная. Например:

let $x = "id"
$table/@[$x]

person Yahya Uddin    schedule 01.12.2015    source источник


Ответы (1)


Вы можете использовать функции local-name или node-name, чтобы получить значение атрибута и сопоставить его с предикатом. local-name просто вернет строку, совпадающую с именем элемента, а node-name вернет полное имя, что обычно рекомендуется, но на практике необходимо, только если вы имеете дело с пространствами имен.

let $x = "id"
return $table/@*[local-name(.) = $x]

let $x := xs:QName("id")
return $table/@*[node-name(.) = $x]
person wst    schedule 01.12.2015
comment
Здорово! Как это можно расширить для работы с переменными элементами? например $table/$x - person Yahya Uddin; 01.12.2015
comment
Например: let $x := "foo" return $table/$x - person Yahya Uddin; 01.12.2015
comment
Сделал это здесь для отдельного вопроса: stackoverflow.com/questions/34026352/ - person Yahya Uddin; 01.12.2015