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
如何在Xquery函数(BaseX)中将字符串转换为Xpath_Xpath_Xquery_Basex - Fatal编程技术网

如何在Xquery函数(BaseX)中将字符串转换为Xpath

如何在Xquery函数(BaseX)中将字符串转换为Xpath,xpath,xquery,basex,Xpath,Xquery,Basex,我正在为BaseX编写Xquery函数,它获取一个参数作为元素节点的名称。然后在Xpath中使用这个名称,但通常我无法将字符串转换为元素 这个方法就是这样的 declare function prefix:getElementWithValue($root as document-node()?, $elem as xs:string?, $minVal as xs:float?, $maxVal as xs:float?) as element()* { let $e := eleme

我正在为BaseX编写Xquery函数,它获取一个参数作为元素节点的名称。然后在Xpath中使用这个名称,但通常我无法将字符串转换为元素

这个方法就是这样的

declare function prefix:getElementWithValue($root as document-node()?, $elem as xs:string?, $minVal as xs:float?, $maxVal as xs:float?)
as element()*

{ 
  let $e := element {$elem} {""}
  for $x in $root//SUBELEM
  return if ($x//$e/@ATTRIB>=$minVal and $x//$e/@ATTRIB<=$maxVal) then ($x)
};
我从中得到了空洞的回应。如果我将
$x//$e
替换为
$x//SomeElem
,它将返回正确的响应。从查询计划中,我看到
$e
被视为文本值。XPATH不是
$x//SomeElem/@ATTRIB
,而是
$x/$e/@ATTRIB


所以我的问题是如何将字符串转换为可在XPATH中使用的类型?

XQuery没有标准函数来计算动态构造的XPATH表达式

然而,许多XQuery处理器提供了某种扩展函数来实现这一点。例如,BaseX提供了query:eval():

请注意,XQuery中的变量表示值,而不是表达式文本的片段。您的表达式
$x//$e/@ATTRIB
相当于
$x//“SomeElem”/@ATTRIB
,这与
$x//SomeElem/@ATTRIB
非常不同


如果您知道
$elem
始终是元素名,那么您可以编写
$x/*[name()=$e]/@ATTRIB
。但是要注意名称空间。

XQuery没有标准函数来计算动态构造的XPath表达式

然而,许多XQuery处理器提供了某种扩展函数来实现这一点。例如,BaseX提供了query:eval():

请注意,XQuery中的变量表示值,而不是表达式文本的片段。您的表达式
$x//$e/@ATTRIB
相当于
$x//“SomeElem”/@ATTRIB
,这与
$x//SomeElem/@ATTRIB
非常不同

如果您知道
$elem
始终是元素名,那么您可以编写
$x/*[name()=$e]/@ATTRIB
。但是要注意名称空间

return prefix:getElementWithValue($db, "SomeElem", 10.0, 10.0)