C++ 在非二叉树中加载xml
我已经创建了非二叉树,以便在其中加载xml数据,并稍后用于对话系统。我想实现对话系统,如在fallout中,每个答案都可以包含4个不同的节点和另一个答案。到目前为止,我用这些句子创建了xmlC++ 在非二叉树中加载xml,c++,xml,C++,Xml,我已经创建了非二叉树,以便在其中加载xml数据,并稍后用于对话系统。我想实现对话系统,如在fallout中,每个答案都可以包含4个不同的节点和另一个答案。到目前为止,我用这些句子创建了xml <Dialogue> <Node>Hello,what do you want?</Node> <Leaf>Nothing</Leaf> <Leaf>Really?</Leaf> <Branch>
<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数据是困难的,所以你有更好的结构的想法吗? 用当前的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非常详细,您可以修剪我的目的是简单地让大家了解我的想法
这是一个考虑我猜的选项……/p>你使用的是XML数据库?XML DOM树没有做你想要的吗?如果它确实,你可以用XPath查询!我使用TyyXML,它做得好,我只是混淆了XML结构,C++中的TyyXML如何在树中实现它,给你DOM(文档对象模型)。这已经是一棵树了。如果你不确定如何使用这棵树,那么也许你需要重新表述你的问题。