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
Xpath xQuery如何将两个列表合并为一个?_Xpath_Xquery_Xquery 3.0 - Fatal编程技术网

Xpath xQuery如何将两个列表合并为一个?

Xpath xQuery如何将两个列表合并为一个?,xpath,xquery,xquery-3.0,Xpath,Xquery,Xquery 3.0,我有一个XML文档: <resultsets> <row> <emp_no>10001</emp_no> <first_name>Georgi</first_name> <last_name>Facello</last_name> </row> <row> <emp_no>100

我有一个XML文档:

<resultsets>
    <row>
        <emp_no>10001</emp_no>
        <first_name>Georgi</first_name>
        <last_name>Facello</last_name>
    </row>
    <row>
        <emp_no>10002</emp_no>
        <first_name>Bezalel</first_name>
        <last_name>Simmel</last_name>
    </row>
    <row>
        <emp_no>10003</emp_no>
        <first_name>Parto</first_name>
        <last_name>Bamford</last_name>
    </row>
</resultsets>
我的问题是,是否可以只使用
$first
$last
生成以下结果

<row>
    <first_name>Georgi</first_name>
    <last_name>Facello</last_name>
 </row>
 <row>
    <first_name>Bezalel</first_name>
    <last_name>Simmel</last_name>
 </row>
 <row>
    <first_name>Parto</first_name>
    <last_name>Bamford</last_name>
 </row>

格奥尔基
法切洛
比撒列
辛梅尔
帕尔托
班福德
基本上,如果我们有两个相同大小的节点列表,我们如何逐个合并它们?我试过了
($first\u name,$last\u name)
($first\u name union$last\u name)
但不起作用


谢谢

首先从同一文档中提取两个不同的序列有点奇怪,但一般来说,如果要进行位置合并,则在$pos处对$item使用
可以帮助:

let $first := (
    <first_name>Georgi</first_name>,
    <first_name>Bezalel</first_name>,
    <first_name>Parto</first_name>),
$second := (
    <last_name>Facello</last_name>,
    <last_name>Simmel</last_name>,
    <last_name>Bamford</last_name>
    )
return for $name at $pos in $first
       return
          <row>
              {$name, $second[$pos]}
          </row>

首先从同一文档中提取两个不同的序列有点奇怪,但一般来说,如果需要位置合并,则在$pos处使用
for$item
可以帮助:

let $first := (
    <first_name>Georgi</first_name>,
    <first_name>Bezalel</first_name>,
    <first_name>Parto</first_name>),
$second := (
    <last_name>Facello</last_name>,
    <last_name>Simmel</last_name>,
    <last_name>Bamford</last_name>
    )
return for $name at $pos in $first
       return
          <row>
              {$name, $second[$pos]}
          </row>

当然,对于FP afficionados,有一个基本的递归函数:

declare function local:merge($s1, $s2) {
  if ($s1 and $s2) 
  then (<row>{head($s1), head($s2)}</row>, 
        local:merge(tail($s1), tail($s2)))
  else ()
}
声明函数本地:合并($s1,$s2){
如果($s1和$s2)
然后({head($s1),head($s2)},
本地:合并(尾部($s1),尾部($s2)))
else()
}

当然,对于FP afficionados,有一个基本的递归函数:

declare function local:merge($s1, $s2) {
  if ($s1 and $s2) 
  then (<row>{head($s1), head($s2)}</row>, 
        local:merge(tail($s1), tail($s2)))
  else ()
}
声明函数本地:合并($s1,$s2){
如果($s1和$s2)
然后({head($s1),head($s2)},
本地:合并(尾部($s1),尾部($s2)))
else()
}