Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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
Xpath xquery参数查询_Xpath_Xquery_Exist Db - Fatal编程技术网

Xpath xquery参数查询

Xpath xquery参数查询,xpath,xquery,exist-db,Xpath,Xquery,Exist Db,我正试图通过从URL获取参数并构建seach参数来使用xquery查询exist db xquery version "1.0"; declare namespace request="http://exist-db.org/xquery/request"; declare namespace xs="http://www.w3.org/2001/XMLSchema"; declare option exist:serialize "method=xml media-type=text/xml

我正试图通过从URL获取参数并构建seach参数来使用xquery查询exist db

xquery version "1.0";
declare namespace request="http://exist-db.org/xquery/request";
declare namespace xs="http://www.w3.org/2001/XMLSchema";
declare option exist:serialize "method=xml media-type=text/xml omit-xml-declaration=no indent=yes";

let $param1:= request:get-parameter("param1",'0')

let $person :=
    if($param1 = '0') 
    then "'*'"
    else concat('contributions/person/@val="',$param1,'"')

return

<xml>
{
    for $x in subsequence(//foo/bar[$person],1,3)
    return $x
}
</xml>
当我运行查询时,它会打印出来,就像值是“*”。在for$x部分中,我可以传递这样的变量吗?我试着用相同的结果放置concat($person,')。对完整路径进行硬编码可以得到我想要的结果,但我希望创建更具动态性的内容


注意:只有一个变量$person,但一旦我让它工作起来,就会有其他变量

我认为理想情况下,您应该避免动态字符串求值。在本例中,一些非常简单的重组可以解决没有重组的问题:

<xml>
{
  for $x in subsequence(//foo/bar[
    if ($param1 = '0')
    then *
    else (contributions/person/@val = $param1)
  ],1,3)
  return $x
}
</xml>

我认为理想情况下,您应该避免动态字符串求值。在本例中,一些非常简单的重组可以解决没有重组的问题:

<xml>
{
  for $x in subsequence(//foo/bar[
    if ($param1 = '0')
    then *
    else (contributions/person/@val = $param1)
  ],1,3)
  return $x
}
</xml>

我认为问题在于$person现在是一个字符串,现在是一条路径。但我似乎不能不把它作为一个字符串,我认为问题在于$person现在是一个字符串,现在是一条路径。但我似乎不能不把它当作一个字符串。这就是我要找的=)谢谢!可能说得太早了。如果我想用相同的表达式检查$param2,但是contribution/link/@val='test'。我该怎么做?我确实执行了“如果($param2=“0”)”,但我收到了以下错误消息:-error FORG0006:effectiveBooleanValue:“(false,false)”的第一项不是节点,并且序列长度>1@user9418如果我理解正确,我想您只需要
If(($param1='0')和($param2='0'))
我试图实现的是一个多方面的搜索,比如,但根据您的示例,我在oxygen上得到了一条错误消息。当我运行查询时,我得到“Parse error:element name containing whitespace:unexpected token:then at line:15 column:25”OK,设法让它工作-性能有点慢。但是谢谢你的帮助这正是我想要的谢谢你!可能说得太早了。如果我想用相同的表达式检查$param2,但是contribution/link/@val='test'。我该怎么做?我确实执行了“如果($param2=“0”)”,但我收到了以下错误消息:-error FORG0006:effectiveBooleanValue:“(false,false)”的第一项不是节点,并且序列长度>1@user9418如果我理解正确,我想您只需要
If(($param1='0')和($param2='0'))
我试图实现的是一个多方面的搜索,比如,但根据您的示例,我在oxygen上得到了一条错误消息。当我运行查询时,我得到“Parse error:element name containing whitespace:unexpected token:then at line:15 column:25”OK,设法让它工作-性能有点慢。但是谢谢你的帮助
<xml>
{
  for $x in subsequence(eval(
    concat('//foo/bar[',$person,']')
  ),1,3)
  return $x
}
</xml>