Xml 如何在xquery中通过变量选择元素?
我知道如何选择这样的元素:Xml 如何在xquery中通过变量选择元素?,xml,xpath,xquery,xquery-3.0,Xml,Xpath,Xquery,Xquery 3.0,我知道如何选择这样的元素: $table/foo 但是,如果元素名存储为变量,如何执行此操作。例如: let $x = "foo" $table/[$x] 我知道如果这是一处房产,我会怎么做: 这与问题的答案几乎相同,但您可以使用元素选择器*(或元素())而不是使用属性选择器@*: 这与问题的答案几乎相同,但不是使用属性选择器@*,而是使用元素选择器*(或元素()): 如果元素名更为复杂,如“foo/bar/hat”,这仍然有效吗 否,谓词[name()='foo/bar/hat']不会选择
$table/foo
但是,如果元素名存储为变量,如何执行此操作。例如:
let $x = "foo"
$table/[$x]
我知道如果这是一处房产,我会怎么做:
这与问题的答案几乎相同,但您可以使用元素选择器
*
(或元素()
)而不是使用属性选择器@*
:
这与问题的答案几乎相同,但不是使用属性选择器
@*
,而是使用元素选择器*
(或元素()
):
如果元素名更为复杂,如“foo/bar/hat”,这仍然有效吗 否,谓词
[name()='foo/bar/hat']
不会选择任何内容,因为foo/bar/hat
是路径表达式,而不是元素名称。XPath中的变量包含值,而不是表达式或表达式片段——它不像shellscript(或其他宏语言)那样展开变量,然后重新解析展开的表达式
XQuery不具备将表达式动态构造为字符串然后对其求值的通用功能。许多产品都有扩展函数来实现这一点,通常称为xx:eval()或xx:evaluate()。XSLT3.0有一个xsl:evaluate指令
如果元素名更为复杂,如“foo/bar/hat”,这仍然有效吗 否,谓词
[name()='foo/bar/hat']
不会选择任何内容,因为foo/bar/hat
是路径表达式,而不是元素名称。XPath中的变量包含值,而不是表达式或表达式片段——它不像shellscript(或其他宏语言)那样展开变量,然后重新解析展开的表达式
XQuery不具备将表达式动态构造为字符串然后对其求值的通用功能。许多产品都有扩展函数来实现这一点,通常称为xx:eval()或xx:evaluate()。XSLT 3.0有一个xsl:evaluate指令。哪个更有可能更有效
*
或元素()
@YahyaUddin,它们是等效的。您可以将*
视为元素()
的“宏”。如果元素名称更复杂,如“foo/bar/hat”@YahyaUddin,这是否仍然有效?是的,在任何情况下,这些基本上都只是计算表达式和子表达式。与星形表达式类似,foo/bar
是element(foo)/child::element(bar)
的缩写。只要表达式有效,您就可以无限期地在树中漫游。哪一个更有可能更有效?它们是等效的。您可以将*
视为元素()
的“宏”。如果元素名称更复杂,如“foo/bar/hat”@YahyaUddin,这是否仍然有效?是的,在任何情况下,这些基本上都只是计算表达式和子表达式。与星形表达式类似,foo/bar
是element(foo)/child::element(bar)
的缩写。只要表达式有效,就可以无限期地遍历树。我已回滚编辑。这种排版在钦奈可能看起来不错,但这不是我的风格,我保留用我自己的风格写作的权利,而不需要一些复制编辑修改它以适应他们的风格。我已经回滚了编辑。这种排版在钦奈可能看起来不错,但这不是我的风格,我保留用我自己的风格写作的权利,而不需要一些编辑修改以适应他们的风格。
$table/*[local-name() = 'foo']
$table/element()[local-name() = 'foo']