我有一个带入口元素的xml。每个条目都有一个作者。我试图以这样的方式对条目进行分组,使得每个组由作者姓名以唯一字母字符开头的条目组成。作者姓名以字母'a'开头的所有条目应该在一个组中,名称以字母'b'开头的作者的所有条目应该在另一个组中,依此类推。
let $feeds :=
<feed>
<entry>
<author>a</author>
<title>Title a</title>
</entry>
<entry>
<author>b</author>
<title>Title ba</title>
</entry>
<entry>
<author>ab</author>
<title>Title ab</title>
</entry>
<entry>
<author>bb</author>
<title>Title bb</title>
</entry>
</feed>
for $entry in $feeds/entry
let $author := $entry/author
order by $author ascending
return
$entry
返回结果:
<entry>
<author>a</author>
<title>Title a</title>
</entry>, <entry>
<author>ab</author>
<title>Title ab</title>
</entry>, <entry>
<author>b</author>
<title>Title ba</title>
</entry>, <entry>
<author>bb</author>
<title>Title bb</title>
</entry>
我正在尝试调整代码,以便返回的结果看起来像这样:
<group>
<author-group>
<entry>
<author>a</author>
<title>Title a</title>
</entry>, <entry>
<author>ab</author>
<title>Title ab</title>
</entry>
</author-group>
<author-group>
<entry>
<author>b</author>
<title>Title ba</title>
</entry>, <entry>
<author>bb</author>
<title>Title bb</title>
</entry>
</author-group>
<group>
在我的示例中,需要两个作者组 - 第一作者组,其名称以a开头的所有作者组成,第二作者组由名称以b开头的所有作者组成
我想忽略作者姓名中的案例,即aa和Aa被视为相同。
然后,我会将每个作者组创建一个联系人列表。
谢谢, 索尼
答案 0 :(得分:1)
这是一个XQuery 1.0解决方案:
let $feeds :=
<feed>
<entry>
<author>a</author>
<title>Title a</title>
</entry>
<entry>
<author>b</author>
<title>Title ba</title>
</entry>
<entry>
<author>Ab</author>
<title>Title ab</title>
</entry>
<entry>
<author>Bb</author>
<title>Title bb</title>
</entry>
</feed>
return
<group>{
for $initial in distinct-values($feeds/entry/author/lower-case(substring(.,1,1)))
order by $initial
return
<author-group>{
for $entry in $feeds/entry[author/lower-case(substring(.,1,1)) eq $initial]
let $author := $entry/author
order by $author ascending
return
$entry
}</author-group>
}</group>
HTH
答案 1 :(得分:1)
此XQuery转换:
<groups>
{
let $entries := /*/entry,
$vals := $entries/author/lower-case(substring(.,1,1))
return
for $fst in $vals[index-of($vals, .)[1]]
order by $fst
return
<author-group>
{$entries[$fst eq lower-case(substring(author,1,1))]}
</author-group>
}
</groups>
应用于提供的XML文档:
<feed>
<entry>
<author>a</author>
<title>Title a</title>
</entry>
<entry>
<author>b</author>
<title>Title ba</title>
</entry>
<entry>
<author>ab</author>
<title>Title ab</title>
</entry>
<entry>
<author>bb</author>
<title>Title bb</title>
</entry>
</feed>
生成想要的正确结果:
<groups>
<author-group>
<entry>
<author>a</author>
<title>Title a</title>
</entry>
<entry>
<author>ab</author>
<title>Title ab</title>
</entry>
</author-group>
<author-group>
<entry>
<author>b</author>
<title>Title ba</title>
</entry>
<entry>
<author>bb</author>
<title>Title bb</title>
</entry>
</author-group>
</groups>