如何在xQuery中获取名称不是文字的属性的值?

时间:2010-06-24 06:38:44

标签: xml xquery

例如:

let $targetAtt "= "att1";

let $doc := <Xml att1 = "la", att2 = "la la">

这样可行:

return $doc/@*[(name(.) = $targetAtt)]

但是可以使用更简洁的语法吗?

例如:以下工作

,例如

return $doc/@$targetAtt.

谢谢!

1 个答案:

答案 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)