什么是服务器端javascript等价于xquery的xpath ?

What is the server side javascript equivilant to xpath for xquery

本文关键字:xpath xquery 等价于 服务器端 javascript 什么      更新时间:2023-09-26

给定一个这样的集合:

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示例匹配具有不同嵌套级别的其他文档结构,而不需要额外的条件。

doc迭代器是在内存中检索整个文档还是只检索被访问的部分?例如,otherLargeObject是加载到内存中的javascript版本?javascript版本是否与xquery版本一样高效?

是否可能出现如下情况?

var result = [];
for (var justTheNodesIWant in fn:doc()('//someXPath/expression/text()') {
    result.concat(justTheNodesIWant);
}
result;  // ['a', 'b', 'c', ... ]

是否有一个等效的方法来实现xquery的结果和性能使用服务器端javascript?

可以:

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

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