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

时间:2015-04-30 13:12:27

标签: javascript xpath xquery marklogic

在XQuery中,您可以非常有效地在返回序列的API函数上执行XPath查询:

fn:collection("abstract")//author

使用server-side JavaScript,这似乎不可能。您可以在循环中迭代序列,并对单个文档执行XPath查询,但它不是非常有效:

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

是否有计划提供此设施,或允许它的解决方法?

2 个答案:

答案 0 :(得分:3)

当然,我们希望随时改进Javascript API,但一般情况下Javascript与JSON的结合效果更好,XQuery可以更好地与XML协同工作:这并不奇怪,因为每种语言都考虑到了这些数据格式。

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

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

这将为您提供所有“抽象”的文章,无论它们在哪个文档中。

答案 1 :(得分:0)

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

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

有关更多信息,请参阅:

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

希望有帮助,