例如:
let $targetAtt "= "att1";
let $doc := <Xml att1 = "la", att2 = "la la">
这样可行:
return $doc/@*[(name(.) = $targetAtt)]
但是可以使用更简洁的语法吗?
例如:以下不工作
,例如
return $doc/@$targetAtt.
谢谢!
答案 0 :(得分:0)
简答:不。
路径表达式需要文字NameTest。没有办法解决这个问题。某些实现可能会提供一个eval函数,例如eval(concat("$doc/@", $targetAtt))
,但一般来说,如果它可以得到帮助就应该避免。
在vanilla XQuery中整理语法的唯一方法是使用用户定义的函数:
declare function local:attribute($node as node(), $name as xs:QName)
{
$node/@*[name(.) = $name]
};
local:attribute($doc, $targetAtt)