我有一个结构,然后有相同值的元素,但任何元素都会改变值。我需要对信息进行分组并挂载输出。
<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>我尝试使用不同的值,但在有效负载中对相同的id有不同的值。在xquery 1.0中如何分组?
发布于 2017-06-17 04:25:32
您可以使用distinct-values遍历惟一的ID,并查询具有该ID的每个匹配元素。
但是,请注意此输出中的一个区别:与2匹配的元素的<nome>值是不同的,并且您的示例仅返回其中的一个。但是不清楚哪一个是正确的,所以这个解决方案输出了两个。如果您只想要一个匹配,那么您需要添加一个约束,这可以像($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
}
}=>
<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>https://stackoverflow.com/questions/44597327
复制相似问题