我知道如何选择这样的元素:
$table/foo
但是,如果元素名称存储为变量,我该怎么做呢。例如:
let $x = "foo"
$table/[$x]
我知道这是怎么做的,如果它是一个属性来自: How to select an attribute by a variable in xquery?
答案 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指令。