Python DBXML XQuery:将子级移动到容器的根
我正在使用python中的xquery更新,并试图从xml树中提取子元素,并将它们作为新的父元素插入到DBXML数据库中。在下面的xquery中,我试图迭代每个子项,然后将子项插入到父集合中Python DBXML XQuery:将子级移动到容器的根,python,xml,xquery,xquery-update,berkeley-db-xml,Python,Xml,Xquery,Xquery Update,Berkeley Db Xml,我正在使用python中的xquery更新,并试图从xml树中提取子元素,并将它们作为新的父元素插入到DBXML数据库中。在下面的xquery中,我试图迭代每个子项,然后将子项插入到父集合中 for $child in collection($items)/parent/path/to/child return ( insert node $child into collection($items) ) 但是,会产生以下错误 XmlQueryEvaluationError Error:
for $child in collection($items)/parent/path/to/child return (
insert node $child into collection($items)
)
但是,会产生以下错误
XmlQueryEvaluationError Error: Cannot perform an update that creates a persistent document with more than one document element, line 0, column
我还尝试插入具有可变值的xml,但所有节点都已定义。同样的错误也会产生
for $child in collection($items)/parent/path/to/child return (
insert node <parent><item>{$child/item}</item></parent> into collection($items)
)
用于集合中的$child($items)/parent/path/to/child返回(
将节点{$child/item}插入集合($items)
)
我希望您不能使用XQuery更新集合
for $child in collection($items)/parent/path/to/child return (
insert node $child into collection($items)
)
更新语句的上下文不是fn:collection
,而是必须提供单个文档节点或其他节点
您的第一条语句实际上是在集合中的每个文档节点中插入一些
子节点
for $child in collection($items)/parent/path/to/child return (
insert node $child into collection($items)
)
如果您只想使用XQuery插入一个新文档,我不确定这在DBXML中是否可行:“您的第一句话实际上是说在集合中的每个文档节点中插入一些子节点。”-这说明了我的逻辑不起作用的原因。但仍在努力寻找解决方案。感谢您的回复。似乎复制整个文档、向根目录添加新元素并删除旧元素是在DBXML中实现这一点的唯一方法,而无需编写额外的python逻辑。