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>
我有一个函数,其中 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>