我正在使用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>
我正在尝试将其中一个"项目"节点上的parent_id
更新为另一个item
节点的id
属性。
运行 XQuery 表达式之前的树:
根
∟ 树
中的第一个文件 ∟ 树中的第二个文件
我正在尝试找出正确的 XQuery 表达式,以将其中一个item
的父级从 root
更改为"一个"item
,因此我的树现在看起来像这样:
预期结果树:
根
∟ 树
中的第一个文件 ∟ 树中的第二个文件
由于属性parent_id
控制这一点,因此我希望准确更新它。
如果您只想更新 @parent_id
属性,请使用一个简单的更新查询,例如
replace value of node //item[@id='Two']/@parent_id with 'One'
但是:这实际上不会改变XML树,而只会改变你在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>