如何将文本节点转换为对象节点以添加子节点

How to convert text node into object node to add a child node

我正在使用 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

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

更新 JSON 文档节点的一种有效方法是使用您的构造 update/replace 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);