0

我有一个 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>

目前,我的代码如下:

let $first := doc("db/apps/flowq/index/employees.xml")//first_name
let $last := doc("db/apps/flowq/index/employees.xml")//last_name

我的问题是,是否只能使用$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_name, $last_name)($first_name union $last_name)但没有用,

谢谢!

4

2 回答 2

3

当然,对于 FP 爱好者来说,还有基本的递归函数:

declare function local:merge($s1, $s2) {
  if ($s1 and $s2) 
  then (<row>{head($s1), head($s2)}</row>, 
        local:merge(tail($s1), tail($s2)))
  else ()
}
于 2018-02-16T09:18:54.150 回答
1

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

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>

http://xqueryfiddle.liberty-development.net/eiQZDbb

或使用高阶for-each-pair

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-each-pair($first, $second, function($f, $s) { <row>{$f, $s}</row>})
于 2018-02-16T08:01:21.680 回答