【发布时间】:2016-03-14 17:23:50
【问题描述】:
我正在使用实现 XQuery 3.1 的 BaseX 8.4.1
我正在尝试在 XQuery 中做一件非常基本的事情,但我似乎无法弄清楚。
我创建了一些示例数据来说明我正在尝试做的事情。我的数据集看起来像这样。它是一个简单的嵌入式结构。有几天,每天都有一些活动,活动有成员。
数据
<root>
<day>
<name>1</name>
<event>
<name>1</name>
<member>A</member>
<member>B</member>
</event>
<event>
<name>2</name>
<member>C</member>
</event>
</day>
<day>
<name>2</name>
<event>
<name>3</name>
<member>A</member>
<member>B</member>
</event>
<event>
<name>4</name>
<member>C</member>
</event>
</day>
<day>
<name>3</name>
<event>
<name>5</name>
<member>C</member>
</event>
</day>
</root>
我想要做的是获取成员列表,并为每个成员获取他们举办活动的日期以及他们举办的活动的列表。所以结果应该是这样的:
期望的结果
<member>
<name>A</name>
<day>
<name>1</name>
<event>
<name>1</name>
<member>A</member>
<member>B</member>
</event>
</day>
<day>
<name>2</name>
<event>
<name>3</name>
<member>A</member>
<member>B</member>
</event>
</day>
</member>
<member>
<name>B</name>
<day>
<name>1</name>
<event>
<name>1</name>
<member>A</member>
<member>B</member>
</event>
</day>
<day>
<name>2</name>
<event>
<name>3</name>
<member>A</member>
<member>B</member>
</event>
</day>
</member>
<member>
<name>C</name>
<day>
<name>1</name>
<event>
<name>2</name>
<member>C</member>
</event>
</day>
<day>
<name>2</name>
<event>
<name>4</name>
<member>C</member>
</event>
</day>
<day>
<name>3</name>
<event>
<name>5</name>
<member>C</member>
</event>
</day>
</member>
为此,我尝试了以下 XQuery:
我尝试了什么
for $member in distinct-values(//member)
return
<member>
<name>{$member}</name>
{for $day in //day where $day/event/member = $member
let $event := $day/event where $event/member = $member
return
<day>
{$day/name}
{$event}
</day>}
</member>
但是,这不会应用过滤。所以我为一个成员保留了他们不是成员的所有事件:
我得到了什么
<member>
<name>A</name>
<day>
<name>1</name>
<event>
<name>1</name>
<member>A</member>
<member>B</member>
</event>
<event>
<name>2</name>
<member>C</member>
</event>
</day>
<day>
<name>2</name>
<event>
<name>3</name>
<member>A</member>
<member>B</member>
</event>
<event>
<name>4</name>
<member>C</member>
</event>
</day>
</member>
<member>
<name>B</name>
<day>
<name>1</name>
<event>
<name>1</name>
<member>A</member>
<member>B</member>
</event>
<event>
<name>2</name>
<member>C</member>
</event>
</day>
<day>
<name>2</name>
<event>
<name>3</name>
<member>A</member>
<member>B</member>
</event>
<event>
<name>4</name>
<member>C</member>
</event>
</day>
</member>
<member>
<name>C</name>
<day>
<name>1</name>
<event>
<name>1</name>
<member>A</member>
<member>B</member>
</event>
<event>
<name>2</name>
<member>C</member>
</event>
</day>
<day>
<name>2</name>
<event>
<name>3</name>
<member>A</member>
<member>B</member>
</event>
<event>
<name>4</name>
<member>C</member>
</event>
</day>
<day>
<name>3</name>
<event>
<name>5</name>
<member>C</member>
</event>
</day>
</member>
当然,这应该很容易,不是吗?
【问题讨论】: