我使用BaseX以多种item
节点存储XML数据,格式如下:
<root>
<item id="Root" parent_id="0" type="folder">
<content>
<name>Root</name>
</content>
</item>
<item id="One" parent_id="Root" type="file">
<content>
<name>First File in the Tree</name>
</content>
</item>
<item id="Two" parent_id="Root" type="file">
<content>
<name>Second File in the Tree</name>
</content>
</item>
</root>
我正在尝试将其中一个'item'节点上的parent_id
更新为另一个item
节点的id
属性。
运行XQuery表达式之前的树:
Root
the树中的第一个文件
∟树中的第二个文件
我正在尝试找出正确的XQuery表达式,将item
之一的父级从root
更改为“一个”item
,这样我的树现在看起来像这样:
预期结果树:
Root
the树中的第一个文件
∟树中的第二个文件
由于属性parent_id
控制了这一点,我希望准确更新。
答案 0 :(得分:2)
如果您只想更新@parent_id
属性,请使用简单的更新查询,例如
replace value of node //item[@id='Two']/@parent_id with 'One'
但是:这实际上不会改变 XML树,而只会改变你在中表示的那个(虽然我相信这就是你的问题所在关于)。存储树的类似XML的方法是直接将您想要的树映射到XML:
<root>
<item id="Root" type="folder">
<content>
<name>Root</name>
</content>
<item id="One" type="file">
<content>
<name>First File in the Tree</name>
</content>
<item id="Two" type="file">
<content>
<name>Second File in the Tree</name>
</content>
</item>
</item>
</item>
</root>
或者更简洁,持有相同的信息:
<folder id="Root" name="Root">
<file id="One" name="First File in the Tree">
<file id="Two" name="Second File in the Tree" />
</file>
</folder>