如何通过xquery中的变量选择元素?

时间:2015-12-01 17:26:47

标签: xml xpath xquery xquery-3.0

我知道如何选择这样的元素:

$table/foo

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

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

我知道这是怎么做的,如果它是一个属性来自: How to select an attribute by a variable in xquery?

2 个答案:

答案 0 :(得分:2)

这几乎与问题How to select an attribute by a variable in xquery?的答案完全相同,但您不使用属性选择器@*,而是使用元素选择器*(或element() ):

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

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

答案 1 :(得分:1)

  

如果元素名称更复杂,如“foo / bar / hat”

,这仍然有用吗?

不,谓词[name() = 'foo/bar/hat']不会选择任何内容,因为foo/bar/hat是路径表达式,而不是元素名称。 XPath中的变量包含值,而不是表达式或表达式片段 - 它不像shellcript(或其他宏语言)那样扩展变量,然后重新解析扩展表达式。

XQuery没有任何通用功能可以动态地将表达式构造为字符串,然后对其进行评估。许多产品都有扩展功能来执行此操作,通常称为xx:eval()或xx:evaluate()。 XSLT 3.0有一个xsl:evaluate指令。