Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 从返回的XQuery中删除重复项_Xml_Xquery_Basex_Xquery 3.0 - Fatal编程技术网

Xml 从返回的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

我的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=“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))