在xquery中包装子节点内容
我有一个我希望非常简单的问题,但我是xquery的新手,我无法做到这一点: 我有以下几点xml:在xquery中包装子节点内容,xquery,Xquery,我有一个我希望非常简单的问题,但我是xquery的新手,我无法做到这一点: 我有以下几点xml: <collation>1<num>12</num> 2<num>12</num> || I<num>8</num>-V<num>8</num>, 1 flyleaf</collation> 112 212|| I8-V8,1个flyleaf
<collation>1<num>12</num> 2<num>12</num> ||
I<num>8</num>-V<num>8</num>, 1 flyleaf</collation>
112 212||
I8-V8,1个flyleaf
我需要将其转换为新节点的内容,如下所示:
<note displayLabel="Collation: Notes">1(12) 2(12) || I(8)-V(8), 1 flyleaf<note>
1(12)2(12)| I(8)-V(8),1个活页
我正在使用以下xquery代码尝试执行此操作:
<note displayLabel="Collation:Notes">{for $t in doc("collation.xml")//collation,
$h in distinct-values($t)
return
????
</note>
{for$t in doc(“collation.xml”)//collation,
不同值中的$h($t)
返回
????
问题是,我可以使用数据($t)显示所有内容(因此不带括号),也可以使用数据($t/num)只显示我想要放在括号中的内容(标记中的信息)但我不知道如何在标签中的项目都用括号括起来的情况下显示这两个项目。我确信这是一个非常简单的答案,但我找不到它。这对于递归来说是一个很好的工作:
declare function local:render(
$n as node()
) as node()?
{
typeswitch($n)
case element(num) return text{concat('(', $n, ')')}
case element(collation) return
<note displayLabel="Collation: Notes">{
for $n in $n/node()
return local:render($n)
}</note>
case element() return element { node-name($n) } {
for $n in $n/node()
return local:render($n)
}
default return $n
};
local:render(
<collation>1<num>12</num> 2<num>12</num> || I<num>8</num>-V<num>8</num>, 1 flyleaf</collation>)
<note displayLabel="Collation: Notes">1(12) 2(12) || I(8)-V(8), 1 flyleaf</note>