2014-08-28 98 views
0

我想使用XQuery 3.0创建一个摘要来显示obj具有的每种类型的多少部分。我有以下XML代码:如何根据属性值来计算子节点?

<root> 
    <obj> 
     <name>Foo1</name> 
     <stuff> 
      <part type = "a"/> 
      <part type = "a"/> 
      <part type = "b"/> 
      <part type = "d"/> 
      <part type = "d"/> 
     </stuff> 
    </obj> 
    <obj> 
     <name>Foo2</name> 
     <stuff> 
      <part type = "a"/> 
      <part type = "c"/> 
      <part type = "c"/> 
     </stuff> 
    </obj> 
    <obj> 
     <name>Foo3</name> 
     <stuff> 
      <part type = "a"/> 
      <part type = "a"/> 
      <part type = "a"/> 
      <part type = "b"/> 
      <part type = "b"/> 
      <part type = "c"/> 
      <part type = "d"/> 
     </stuff> 
    </obj> 
</root> 

而且我想显示的结果类似于下列方式之一:

 OR 
Foo1 | Foo1 
a 2  | a 2 
b 1  | b 1 
d 2  | c 0 
     | d 2 
     | 
Foo2 | Foo2 
a 1  | a 1 
c 2  | b 0 
     | c 2 
     | d 0 
     | 
Foo3 | Foo3 
a 3  | a 3 
b 2  | b 2 
c 1  | c 1 
d 1  | d 1 
     | 

回答

2

GROUP BY应该很好的工作在这里:

for $obj in //obj 
return 
    <result> 
    {$obj/name} 
    { 
    for $part in $obj//part 
      group by $type := $part/@type 
      return <part type="{$type}">{count($part)}</part> 
    } 
    </result> 
相关问题