Xml 从返回的XQuery中删除重复项
我的XQuery是:Xml 从返回的XQuery中删除重复项,xml,xquery,basex,xquery-3.0,Xml,Xquery,Basex,Xquery 3.0,我的XQuery是: declare namespace xsd="http://www.w3.org/2001/XMLSchema"; for $schema in xsd:schema for $nodes in $schema//*, $attr in $nodes/xsd:element/@name where fn:contains($attr,'city') return $attr 返回:name=“city”name=“city”name=“city”name=“ci
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return $attr
返回:name=“city”name=“city”name=“city”name=“city”name=“city”name=“city”
当我添加不同的值时,例如:
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return distinct-values($attr)
返回:city
我只需要一个“城市”,我怎么做呢?使用
分组方式。您的查询多次返回city
,因为在每个迭代(for循环)中,$attr
中只有一个这样的元素。因此,您在单个元素上执行不同的值
,但要执行多次
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
group by $attr
return $attr
您需要对整个结果应用distinct values
函数(即。 e、 ,而不是每个结果项):
查询也可以编写为单个XPath表达式:
distinct-values(//xs:element/@name[contains(., 'city')])
这项工作
distinct-values(for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return distinct-values($attr))
你能举一个你正在查询的文档的例子吗?有没有办法加快速度?我面临的问题是,当使用distinct-values()或group by语句时,baseX非常慢。如果没有,xquery将在4s内正确完成。但是,在消除双值的情况下,大约需要4分钟。值约为60.000个文本节点;每个都包含一个引理。1G内存可用于每个查询。现在唯一加快速度的方法是让另一种语言删除双值…现在我想要的是,请您将此发送到BaseX邮件列表,并添加有关您的用例、特定查询等的更多信息。谢谢,我已经加入了列表。至于上面提到的问题,我发现区分大小写分组和不区分大小写分组之间有很大的区别:后者速度很慢。因此,我的解决方案是使用默认排序规则,而不是以前使用的“html ascii不区分大小写”
distinct-values(for $schema in xsd:schema
for $nodes in $schema//*,
$attr in $nodes/xsd:element/@name
where fn:contains($attr,'city')
return distinct-values($attr))