xml - XQuery 不同节点的使用

标签 xml xquery basex

所以我想插入函数distint-nodesfor条款(见下文)。为此,我正在使用 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)

但我收到以下错误(B​​aseX 查询信息):

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/

相关文章:

java - 不转义 Spring WS SOAP 主体中的字符

xml - 构造一个 XPath 查询,根据子节点的数量过滤节点?

xml - XQuery 按升序和降序排序

xml - XML子树-仅选择指定的子节点,但与父节点一起选择

php - 以高效且用户友好的方式呈现加载缓慢的结果

Python:非侵入式处理 XML 文件

python - 保留 XML 属性顺序?

java - XML 节点替换失败

xml - 从返回的 XQuery 中删除重复项

error-handling - 是否可以检索引发错误的命名空间?