2010-11-01 58 views
0

我已經創建了非二叉樹來加載其中的xml數據並稍後用於對話系統。我想實現類似於在每個答案中可以包含4個不同的對話系統的對話系統與其他answers.So節點到目前爲止,我創建的XML與句子在非二叉樹中加載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> 

這裏父葉子是兒童和低於第一分支節點是孩子的上node.I找到difficultis到在C++樹節點表示用這種結構加載樹中的XML數據,所以你有更好的結構的想法?

+0

您使用的是什麼XML庫? XML DOM樹沒有做你想要的嗎?如果是這樣,你可以用xpath查詢! – 2010-11-01 16:16:23

+0

我正在使用tinyXML,它確實沒問題我只是與xml結構混淆,以及如何在C++樹中實現它 – toshmosh 2010-11-01 16:34:59

+0

tinyXML爲您提供了DOM(文檔對象模型),它已經是一棵樹了。如果你不確定*如何使用那棵樹,那麼也許你需要重新制定你的問題。 – 2010-11-01 16:38:30

回答

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非常冗長,你可以用屬性,我的意圖是簡單地通過...

這是一個選項,可以考慮我猜...