XQuery 中的循环多次重复结果

Loop in XQuery repeats results several times

我有一个函数,其中 returns 个段落来自文本。所以我将 <anchor> 标签的属性编号(@n)与 <notes> 标签的属性编号进行比较,如果相同我想用工具提示打印它,如果不同我只是想打印出段落。

declare function letter:text_trans($node as node(), $model as map(*))
{
    let $resource := collection('/db/apps/Tobi-oshki/data')
    for $ab in $resource//tei:div[@type="translation"]/tei:ab
    for $note in $resource//tei:div[@type="notes"]/tei:note
    return
        if (data($note/@n) eq data($ab/tei:anchor/@n))
        then
          <div class="tooltip">{$ab}
            <span class="tooltiptext"> {data($note/@n)}.{$note}</span>
          </div>
        else
          <p> {$ab} </p>
    
};

<notes>中我有三个笔记,当它循环遍历笔记时,每个段落返回三次。

我怎样才能改变它 returns 段落只有一次?

我正在使用 xquery version "3.1";

$ab 的 for 循环内,让 $note 和 select 注释的变量具有与 [=13= 匹配的 @n 属性值], 那么如果有匹配的 $note, 使用它, 否则 return <p> 只使用 $ab:

let $resource := collection('/db/apps/Tobi-oshki/data')
for $ab in $resource//tei:div[@type="translation"]/tei:ab
let $note := $resource//tei:div[@type="notes"]/tei:note[@n = $ab/tei:anchor/@n]
return
    if ($note)
    then
      <div class="tooltip">{$ab}
        <span class="tooltiptext"> {data($note/@n)}.{$note}</span>
      </div>
    else
      <p> {$ab} </p>  

有了这个输入:

<tei:doc>
  <tei:div type="notes">
    <tei:note n="1">note1</tei:note>
    <tei:note n="2">note2</tei:note>
  </tei:div>
  <tei:div type="translation">
    <tei:ab><tei:anchor n="1">translated note1</tei:anchor></tei:ab>
    <tei:ab><tei:anchor n="3">translated note3</tei:anchor></tei:ab>
  </tei:div>
</tei:doc>

上面的代码产生了这个输出:

<div class="tooltip">
  <tei:ab xmlns:tei="tei">
    <tei:anchor n="1">translated note1</tei:anchor>
  </tei:ab>
  <span class="tooltiptext">1.<tei:note n="1" xmlns:tei="tei">note1</tei:note>
  </span>
</div>
<p>
  <tei:ab xmlns:tei="tei"><tei:anchor n="3">translated note3</tei:anchor></tei:ab>
</p>