MarkLogic 8 和服务器端 JavaScript - 序列上的 XPath 查询

MarkLogic 8 and server-side JavaScript - XPath Queries on Sequences

在 XQuery 中,您可以非常高效地对 API 函数执行 XPath 查询,其中 returns 一个序列:

fn:collection("abstract")//author

对于 server-side JavaScript,这似乎是不可能的。您可以在循环中迭代序列,并对单个文档执行 XPath 查询,但效率不是很高:

var authors = [];
for ( var doc of fn.collection("abstract")){
  authors.push( doc.xpath("//author") );
}

是否有提供此功能的任何计划或允许它的解决方法?

您可以使用 toArray() 函数从 ValueIterator 获取数组,如:

fn.collection("abstract").toArray();

更多信息,请参阅:

http://docs.marklogic.com/guide/jsref/api#id_90070

希望对您有所帮助,

当然,我们希望不断改进 Javascript API,但总的来说,Javascript 与 JSON 配合使用效果更好,而 XQuery 与 XML 配合使用效果更好:不足为奇,因为每种语言在设计时都考虑到了这些数据格式。

对于特定情况,您还可以使用 DOM API:doc.getElementsByTagName("author")。与 xpath 调用相比,它的开销要少一些。另一件要知道的事情是你可以给出一个完整的 XPath 作为 xpath 的参数,例如

anydoc.xpath("collection('abstract')//author")

这将为您提供 'abstract' 中的所有文章,无论它们在哪个文档中。