1

我正在使用 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 表达式来将其中一个items 的父级从更改root为 "one" item,这样我的树现在看起来像这样:

预期结果树:


∟ 树中的第一个文件
    ∟ 树中的第二个文件

由于属性parent_id控制了这一点,我希望准确地更新它。

4

1 回答 1

2

如果您只想更新@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>
于 2014-11-16T09:14:16.177 回答