我希望这是一个非常简单的问题,但我是xquery的新手而且我无法完成这项工作:
我有以下一点xml:
<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>
我使用以下xquery代码尝试执行此操作:
<note displayLabel="Collation:Notes">{for $t in doc("collation.xml")//collation,
$h in distinct-values($t)
return
????
</note>
问题是我可以使用数据($ t)显示所有内容(所以没有括号),或者我可以使用数据显示我想要在括号中的内容(标签中的信息) ($ t / num)但是我无法弄清楚如何用括在括号中的标签中的项目来显示它们。我确定这是一个非常简单的答案,但我无法找到它。
答案 0 :(得分:1)
这对于递归是一个很好的工作:
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>