如何通过 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 指令。
我知道如何 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 指令。