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

标签 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

我看过 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/

相关文章:

javascript - 在变量函数中调用 Javascript 函数[解决]

css - 有没有办法修改 Jersey 生成的 XML 响应以包含样式表信息?

xml - 正确的结构布局以在 go 中解析 xml

javascript - 从两个圆之间的圆心画线

javascript - 附加到 getJSON 中的字符串

r - 在 R 中使用 xpath 更新节点(未知深度)?

xml - 知道 current() 是元素还是属性

java - 如何在 java 中使用 XPath/JsonPath 更改 json 文件中的值

javascript - 在运行时使用 GAS 调整 HTML 模态的大小

java - 为什么不调用 Eclipse 插件处理程序?