我有一个结构,然后具有相同值的元素,但任何元素都会更改该值。 我需要对信息进行分组并安装输出。
<root>
<cadastro>
<id>2</id>
<nome>abcd</nome>
<links>
<link>example7</link>
</links>
</cadastro>
<cadastro>
<id>2</id>
<nome>abc</nome>
<links>
<link>example5</link>
<link>example3</link>
</links>
</cadastro>
<cadastro>
<id>5</id>
<nome>xpto</nome>
<links>
<link>example1</link>
</links>
</cadastro>
</root>
我必须只返回2个输出
<results>
<result>
<idResult>2</idResult>
<nome>abc</nome>
<links>
<url>example7</url>
<url>example5</url>
<url>example3</url>
</links>
</result>
<result>
<idResult>5</idResult>
<nome>xpto</nome>
<links>
<url>example1</url>
</links>
</result>
<results>
我尝试使用distinct-values,但我在有效负载上有相同id的不同值。 我怎样才能在xquery 1.0上分组?
答案 0 :(得分:0)
您可以使用distinct-values
迭代唯一ID,并查询具有该ID的每个匹配元素。
但是,请注意此输出中的一个区别:匹配<nome>
的元素的2
值不同,您的示例仅返回其中一个。但目前尚不清楚哪一个是正确的,所以这个解决方案输出两者。如果您只想要一个匹配,那么您需要添加一个约束,这可能就像($id-results/nome)[1]
一样简单,但不能保证会选择您想要的约束。
element results {
let $ids := $data/cadastro/id
for $id in distinct-values($ids)
let $id-results := $data/cadastro[id = $id]
return element result {
element idResult { $id },
$id-results/nome,
element links {
$id-results/links/link
}
}
=&GT;
<results>
<result>
<idResult>2</idResult>
<nome>abcd</nome>
<nome>abc</nome>
<links>
<link>example7</link>
<link>example5</link>
<link>example3</link>
</links>
</result>
<result>
<idResult>5</idResult>
<nome>xpto</nome>
<links>
<link>example1</link>
</links>
</result>
</results>