如何通过 xquery 中的变量 select 一个元素?

How to select an element by a variable in xquery?

我知道如何 select 像这样的元素:

$table/foo

但是,如果元素名称存储为变量,我该怎么做。例如:

let $x = "foo"
$table/[$x]

如果是 属性,我知道该怎么做:

这与问题 的答案几乎相同,但您可以使用元素选择器 *(或 [=13],而不是使用属性选择器 @* =]):

$table/*[local-name() = 'foo']

$table/element()[local-name() = 'foo']

Would this still work if the element name was more complex like "foo/bar/hat"

不,谓词 [name() = 'foo/bar/hat'] 不会 select 任何东西,因为 foo/bar/hat 是路径表达式,而不是元素名称。 XPath 中的变量保存值,而不是表达式或表达式片段 - 它不像 shellscript(或其他宏语言)那样展开变量然后重新解析展开的表达式。

XQuery 没有任何将表达式动态构造为字符串然后对其求值的一般功能。许多产品都具有执行此操作的扩展函数,通常称为 xx:eval() 或 xx:evaluate()。 XSLT 3.0 有一个 xsl:evaluate 指令。