如何使用 XQuery 更新 BaseX XML 数据库中的属性



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

相关内容

  • 没有找到相关文章

最新更新