gpt4 book ai didi

javascript - 如何将对象转换为节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:02:48 26 4
gpt4 key购买 nike

我想将一些文档属性(在 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

我看过 nodebuilder MarkLogic 文档中的示例,我想使用该界面。例如

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)
)

关于javascript - 如何将对象转换为节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com