Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何在xquery中通过变量选择元素?_Xml_Xpath_Xquery_Xquery 3.0 - Fatal编程技术网

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']