所以我想插入函数distint-nodes
在for
条款(见下文)。为此,我正在使用 BaseX。
这是我的代码:
<autores>{
for $a in doc("libros.xml")//libro
return
<autor>
<nombre>{
for $b in $a/autor
return concat($b/nombre,' ',$b/apellido)
}
</nombre>
{
for $c in doc("libros.xml")//libro
where $c/autor = $a/autor
return $c/titulo
}
</autor>
}
</autores>
我想在第一个 for 中使用这个函数,所以它只返回一个 <autor/>
的唯一实例元素:
for $b in distinct-nodes($a/autor)
return concat($b/nombre,' ',$b/apellido)
但我收到以下错误(BaseX 查询信息):
Error: Stopped at G:/Pruebas XML/XML/xqueryLibros.xq, 6/31: [XPST0017] Unknown function: fn:distinct-nodes.
为什么这个函数存在却不为人知?有什么我想念的吗?
编辑:我的目的是获取元素 $a/autor
的唯一实例其中 $a/autor/nombre
和 $a/autor/apellidos
文本值相同
<autores>
<autor>
<nombre>W. Stevens</nombre>
<titulo>TCP/IP Ilustrado</titulo>
<titulo>Programación Avanzada en el entorno Unix</titulo>
</autor>
<autor>
<nombre>W. Stevens</nombre>
<titulo>TCP/IP Ilustrado</titulo>
<titulo>Programación Avanzada en el entorno Unix</titulo>
</autor>
<autor>
<nombre>Serge Abiteboul Peter Buneman Dan Suciu</nombre>
<titulo>Datos en la Web</titulo>
</autor>
<autor>
<nombre/>
</autor>
</autores>
最佳答案
没有标准的 XQuery 函数 fn:distinct-nodes(...)
, XQuery 只知道 fn:distinct-values(...)
.
第三方XQuery函数库functx
知道一个 functx:dinstinct-nodes(...)
function ,它再次作为标准 XQuery 函数实现。图书馆可以是downloaded并作为大多数 XQuery 实现的模块导入,因为它仅使用标准 XQuery 函数。
如果所有<autor/>
elements contains 是作者姓名,考虑申请fn:distinct-values(...)
相反,重新创建 <autor/>
之后的元素。
出于性能原因,如果编译时间增加太多(库相当大),只提取所需的函数可能是合理的。另请注意,一些函数具有更快的 XQuery 3.0 对应函数,利用了新的语言功能。
fn
是默认的 XQuery 函数命名空间,funct
由函数库定义的。
关于xml - XQuery 不同节点的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43052931/