如何将对象转换为节点
how to convert objects into nodes
我想将一些文档属性(在 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
我在 MarkLogic 文档中看过 nodebuilder 示例,我想使用该界面。例如
myNode.xpath('//data')
var children = myNode.childNodes()
有没有一种方法可以将对象转换为节点,而不是使用 XPath 进行评估?或者,是否有更好的方法来处理服务器端 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
// ...
}
而不是
for (var p of xdmp.documentProperties(cts.uriMatch('/pattern/*'))) {
var isANode = p instanceof Node; // true
// ...
}
返回的类型是一个 ValueIterator
,相当于一个 XQuery 序列,可以使用以下方式访问:
xdmp.documentProperties(uri).next().value
这在 QConsole 中对我有用:
var uris = ['/test.xml', '/test2.xml'];
var counts = [];
for (var p of xdmp.documentProperties(uris)) {
counts.push(fn.count(p.xpath('//data')))
}
counts
在我的测试中,每个 p 都是一个节点。我使用 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)
)
我想将一些文档属性(在 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
我在 MarkLogic 文档中看过 nodebuilder 示例,我想使用该界面。例如
myNode.xpath('//data')
var children = myNode.childNodes()
有没有一种方法可以将对象转换为节点,而不是使用 XPath 进行评估?或者,是否有更好的方法来处理服务器端 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
// ...
}
而不是
for (var p of xdmp.documentProperties(cts.uriMatch('/pattern/*'))) {
var isANode = p instanceof Node; // true
// ...
}
返回的类型是一个 ValueIterator
,相当于一个 XQuery 序列,可以使用以下方式访问:
xdmp.documentProperties(uri).next().value
这在 QConsole 中对我有用:
var uris = ['/test.xml', '/test2.xml'];
var counts = [];
for (var p of xdmp.documentProperties(uris)) {
counts.push(fn.count(p.xpath('//data')))
}
counts
在我的测试中,每个 p 都是一个节点。我使用 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)
)