Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
什么是与xquery的xpath等效的服务器端javascript_Javascript_Xpath_Xquery_Marklogic - Fatal编程技术网

什么是与xquery的xpath等效的服务器端javascript

什么是与xquery的xpath等效的服务器端javascript,javascript,xpath,xquery,marklogic,Javascript,Xpath,Xquery,Marklogic,对于这样的集合: collection : [ 'doc1.json' : { someXPath : [ { expression : 'a' }, { expression : 'b' }, { expression : 'c' }, ], otherLargeObject : [ ... ] }, 'doc2.json' : {...}, 'doc3.

对于这样的集合:

collection : [
    'doc1.json' : {
       someXPath : [
           { expression : 'a' },
           { expression : 'b' },
           { expression : 'c' },
       ],
       otherLargeObject : [ ... ]
    },
    'doc2.json' : {...},
    'doc3.json' : {...}
]
使用Xquery我可以选择集合的子节点,如下所示:

fn:doc()//someXPath/expression/text() 
导致这样的结果:

[ 'a', 'b', 'c', ... ]
上面的语法很简洁,结果只包含我想要的数据

使用Javascript我将尝试以下方法:

var results = [];
for (var doc of fn:doc()) {
    if (doc.someXPath) {
        results.push(doc.someXPath.map(function (x) {
            return x.expression;
        })
    }
}
javascript代码冗长,没有那么多功能。xquery示例匹配具有不同嵌套级别的其他文档结构,而不需要额外的条件

文档迭代器是检索内存中的整个文档还是只检索被访问的部分?e、 g.是否在javascript版本中将其他LargeObject加载到内存中?javascript版本是否与xquery版本一样高效

有可能出现以下情况吗

var result = [];
for (var justTheNodesIWant in fn:doc()('//someXPath/expression/text()') {
    result.concat(justTheNodesIWant);
}
result;  // ['a', 'b', 'c', ... ]
是否有使用服务器端javascript实现xquery结果和性能的等效方法?

以下方法可行:

var results = [];

for (var exp of  xdmp.xqueryEval('fn:doc()/someXPath/expression')) {
  results.push(exp);
}

results

这样做的缺点是语言混合,包括在字符串中嵌入代码

另外还需要一个额外的xdmp:eval执行权限,以及潜在的安全风险。您也可以在SJS中的节点上使用
xpath()
,但这是按文档运行的。上面的方法会更有效率。谢谢,很好。你能告诉我上面的javascript代码片段的性能是否低于xquery吗?据我所知,我希望性能相当(大部分工作仍在xquery中完成)。如果有人知道的更好,或者你发现了一些不同的东西,请让我知道。