我知道如何选择这样的元素:
$table/foo
但是,如果元素名称存储为变量,我该怎么做。例如:
let $x = "foo"
$table/[$x]
如果它是一个属性,我知道该怎么做: How to select an attribute by a variable in xquery?
我知道如何选择这样的元素:
$table/foo
但是,如果元素名称存储为变量,我该怎么做。例如:
let $x = "foo"
$table/[$x]
如果它是一个属性,我知道该怎么做: How to select an attribute by a variable in xquery?
这与如何通过 xquery 中的变量选择属性的问题的答案几乎相同?但不是使用属性选择器@*
,而是使用元素选择器,*
(或element()
):
$table/*[local-name() = 'foo']
$table/element()[local-name() = 'foo']
如果元素名称更复杂,例如“foo/bar/hat”,这仍然有效吗
不,谓词[name() = 'foo/bar/hat']
不会选择任何内容,因为foo/bar/hat
它是路径表达式,而不是元素名称。XPath 中的变量保存值,而不是表达式或表达式片段 - 它不像 shellscript(或其他宏语言),其中变量被扩展,然后重新解析扩展的表达式。
XQuery 不具备将表达式动态构造为字符串然后对其求值的任何通用能力。许多产品具有执行此操作的扩展函数,通常称为 xx:eval() 或 xx:evaluate()。XSLT 3.0 有一个 xsl:evaluate 指令。