首页 > 解决方案 > 如何将文本节点转换为对象节点以添加子节点

问题描述

我正在使用 Javascript 和 JSON 文件。我正在尝试创建一个子节点并将一个值插入该节点

基本设置是:

    declareUpdate();
xdmp.documentInsert("/example.json",
{"a":"aa","b":"bb"});

我想看到的是 a 或 b 中带有一些数据的子节点。

declareUpdate(); var doc = cts.doc("/example.json"); var docObj = doc.toObject(); docObj. = "this is a much different value"; xdmp.nodeInsertChild(cts.doc("/example.json").xpath("/a"), docObj);

[javascript] XDMP-CHILDNODEKIND: xdmp.nodeInsertChild(Sequence(xdmp.unpath("fn:doc('/foo.json')/text('foo')")), Text("this is a child node value")) -- text nodes cannot have text node children

标签: jsonnodesmarklogic

解决方案


该错误表明您尝试将 JSON 属性添加为文档节点的直接子节点。MarkLogic 对象节点不能有文档节点子节点。

更新 JSON 文档节点的一种有效方法是用您的构造更新/替换 JavaScript 对象节点。(注意:您不能将文本表达式直接插入 MarkLogic JSON 节点,而是插入命名节点。)

如果期望的结果类似于

{
  "a": {
    "a1": "aa", 
    "a2": "new child node"
  },
  "b": "bb"
}

,然后只需应用节点替换:

declareUpdate();
const doc = cts.doc("/example.json"); 
const newNode = { "a1":"aa", "a2":"new child node" };
xdmp.nodeReplace(doc.xpath("/a"), newNode);

推荐阅读