提问人:supersteve 提问时间:11/6/2023 最后编辑:Mads Hansensupersteve 更新时间:11/6/2023 访问量:28
尝试插入数组节点对象 XDMP-CHILDDUPNAME 时出错?
Error trying to insert array node object XDMP-CHILDDUPNAME?
问:
我已经阅读了有关使用 XQuery 操作 JSON 文档以及使用 xdmp:insert-xxx 添加节点和向数组添加元素的所有文档,但我正在尝试创建一个具有现有数组值数组的新对象,但似乎无法弄清楚。
我想将以下对象添加到我的 json 文档的根节点。
{
"A" : [ "B", "C" ]
}
当我尝试时,
xdmp:node-insert-child( $doc/object-node(), object-node{ "ConfiscatedItems" : array-node{ "calculator", "welding iron" } }/ConfiscatedItems )
我收到 XDMP-CHILDDUPNAME 对象节点不能有两个同名的子节点
我的最终目标是说,如果我有一份文件,比如;
{
"f": "g",
"h": 1,
"q": [ 1, 2 ]
}
我希望它看起来像;
{
"f": "g",
"h": 1,
"q": [ 1, 2 ],
"A": [ "B", "C" ]
}
我可以通过创建一个名为“A”的新文本节点和与数组一起使用来分两步完成此操作,但我想在一个步骤中完成此操作,而不是两个步骤。这主要是因为我正在创建用于执行任务的通用代码,这意味着我对事务有限制,并且不能在同一事务中分两步执行此操作。
有人可以帮忙吗?xdmp:node-replace()
xdmp:value()
答:
1赞
Mads Hansen
11/6/2023
#1
当您的 XPath 使用数组节点对命名属性进行寻址时,它将返回数组项的序列。这些项目将具有相同的名称,并将导致(如果您不了解正在发生的事情,则会感到困惑)错误消息 XDMP-CHILDDUPNAME。/ConfiscatedItems
使用 xdmp:describe()
更好地了解为 JSON 节点选择的内容会很有帮助。
您希望返回数组节点,而不是数组中的项。因此,请将您的 XPath 更改为:
/ConfiscatedItems
自:
/array-node("ConfiscatedItems")
或者,以匹配您发布的示例 JSON/array-node("A")
评论
0赞
supersteve
11/8/2023
谢谢。仔细想想就有点明显了。我没在想。
评论