我有以下xml:
<form>
<bibl>
<biblScope>1</biblScope>
<biblScope>a</biblScope>
</bibl>
<bibl>
<biblScope>2</biblScope>
<biblScope>b</biblScope>
</bibl>
<bibl>
<biblScope>38</biblScope>
<biblScope>c</biblScope>
</bibl>
</form>
使用此XQuery
for $bibl in form/bibl
return
<div>
{
for $biblScope in $bibl/biblScope/text()
return
$biblScope
}
{if ($bibl[position()] ne $bibl[last()]) then ',' else '@'}
</div>
的<biblScope>
内容被印刷一个接一个。在每个bibl
元素之后,除了最后一个元素,我想添加一个分隔符(逗号/“,”),但是使用上面的代码,我得到的只是
<div>
1a
@
</div>
<div>
2b
@
</div>
<div>
38c
@
</div>
这绝对是错误的,因为我想拥有的是
<div>1a,</div>
<div>2b,</div>
<div>38c@</div>
(在每个bibl
元素内容之后添加一个逗号;应该在最后一个后跟@
逗号而不是逗号。)
经过一段时间的尝试,我可能需要一些帮助。正确的方法是什么?
问题是,position()
并last()
在当前背景下,这不是由FLWOR表达式设置工作。如果要使用类似的语义,请使用以下at $position
语法获取位置计数器,并将其定义$last
为结果数:
let $last := count(form/bibl)
for $bibl at $position in form/bibl
return
<div>
{
for $biblScope in $bibl/biblScope/text()
return
$biblScope
}
{if ($position ne $last) then ',' else '@'}
</div>
如果您能够使用XQuery 3.0,则!
此处可能会使用应用程序运算符。通过将轴步和元素构造函数替换为不必要的循环,您可以依赖位置谓词,因为上下文已设置为<bibl/>
元素:
form/bibl ! <div>
{
biblScope/text(),
if (position() ne last()) then ',' else '@'
}
</div>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句