0

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

$table/foo

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

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

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

4

2 回答 2

2

这与如何通过 xquery 中的变量选择属性的问题的答案几乎相同?但不是使用属性选择器@*,而是使用元素选择器,*(或element()):

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

$table/element()[local-name() = 'foo']
于 2015-12-01T17:31:15.003 回答
1

如果元素名称更复杂,例如“foo/bar/hat”,这仍然有效吗

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

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

于 2015-12-02T09:11:12.477 回答