chr*_*lly 4 javascript xml xpath marklogic marklogic-8
我想使用一些文档属性(在xml中)作为节点,以便我可以使用子元素.到目前为止,我有:
var counts = [];
for (var p of xdmp.documentProperties(uris)) {
var isANode = p instanceof Node; // false (actually true - see edit)
var count = xdmp.xqueryEval('fn:count(' + p + '//data)')
counts.push(count)
}
counts
Run Code Online (Sandbox Code Playgroud)
我在MarkLogic文档中看过nodebuilder示例,我想使用该接口.例如
myNode.xpath('//data')
var children = myNode.childNodes()
Run Code Online (Sandbox Code Playgroud)
而不是使用XPath进行评估有没有办法将对象转换为节点?或者,有没有更好的方法来使用Server Side JavaScript中的现有XML?
在XQuery中我可以使用,xdmp:tranform-to-json()但SJS中没有提供该功能.
编辑:
在我尝试提供干净的代码示例时,我遗漏了重要信息.我的代码结构如下:
for (var uri of cts.uriMatch('/pattern/*')) {
var p = xdmp.documentProperties(uri);
var isANode = p instanceof Node; // false
// ...
}
Run Code Online (Sandbox Code Playgroud)
代替
for (var p of xdmp.documentProperties(cts.uriMatch('/pattern/*'))) {
var isANode = p instanceof Node; // true
// ...
}
Run Code Online (Sandbox Code Playgroud)
返回的类型ValueIterator相当于XQuery序列,可以使用以下方法访问:
xdmp.documentProperties(uri).next().value
Run Code Online (Sandbox Code Playgroud)
小智 7
这在QConsole中对我有用:
var uris = ['/test.xml', '/test2.xml'];
var counts = [];
for (var p of xdmp.documentProperties(uris)) {
counts.push(fn.count(p.xpath('//data')))
}
counts
Run Code Online (Sandbox Code Playgroud)
在我的测试中,每个p都是一个Node.我用xquery脚本创建了一些示例数据.
let $test-data := (
<priority>
<data>hello</data>
</priority>,
<status>
<data>hi</data>
</status>
)
return
(
xdmp:document-set-properties("/test.xml", $test-data),
xdmp:document-set-properties("/test2.xml", $test-data)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |