在非二叉树中加载xml

时间:2010-11-01 16:12:47

标签: c++ xml

我创建了非二叉树以便在其中加载xml数据并稍后用于对话系统。我想实现像fallout中的对话系统,其中每个答案可以包含4个不同的节点和另一个答案。我用句子

创建了xml
<Dialogue>
<Node>Hello,what do you want?</Node>
<Leaf>Nothing</Leaf>
<Leaf>Really?</Leaf>
    <Branch>
        <Node>Really?</Node>
        <Leaf>Yes></Leaf>
            <Branch>
                <Node>No</Node>
                <Leaf>Why not?</Leaf>
            </Branch>
    </Branch>
</Dialogue>

这里c ++中树中的节点表示为父叶子是子叶子,第一个分支节点下面是上层节点的子节点。我发现很难用这种结构在树中加载xml数据所以你有更好结构的想法吗? ?

1 个答案:

答案 0 :(得分:0)

使用您当前的XML结构,您会发现实现它很棘手,我建议一个选项..

<Dialogue>
  <Node id="root">
    <Prompt>Hello,what do you want?</Prompt>
    <Response>
      <match>Nothing</match>
      <Branch node_id="nothing"/>
    </Response>
    : <!-- more Response nodes -->
  </Node>
  <Node id="nothing">
    <Prompt>Really?</Prompt>
    <Response>
      <match>Yes</match>
      <Branch node_id="nothing.yes"/>
    </Response>
    <Response>
      <match>Actually...</match>
      <Branch node_id="nothing.actually"/>
    </Response>
  </Node>
  <Node id="nothing.yes">
    <Prompt>Why not?</Prompt>
    : <!-- Response Nodes -->
  </Node>
  <Node id="nothing.actually">
    <Prompt>Okay, what then?</Prompt>
    : <!-- Response Nodes -->
  </Node>
</Dialogue>

实际上,对于这种类型的数据,您需要一个地图来存储每个“节点”,其中节点是一个带有一组响应的提示(地图的关键是节点的ID - 您必须保证是唯一的。根据哪个响应匹配,然后你可以在地图中找到节点并将控制权交给那个等等。可能比树更容易处理?还可以让你重新使用状态。 ..注意:上面的XML真的很冗长,你可以用属性修剪它,我的目的只是简单地理解...

可以考虑我猜...