2017-01-03 14 views
0

저는 skype bot 앱을 만들고 있습니다. 트리 모델에서 노드를 읽는 문제가 있습니다. 트리 모델 예제는 하위 노드를 따르지만 내 노드는 시스템에서 읽을 diff 탭이 있습니다.treemodel + skype-bots 정의되지 않은 'model'속성을 읽을 수 없습니다.

XML 예 -

<?xml version="1.0" encoding="UTF-8" ?> 
<rootmenu id="1" title="menu" description="What scenario would you like to run?"> 
    <MenuOption id="1.1" title="Company Data" response="You entered company data" description="What action would you like to perform"> 
     <HierarchyMenuItem id="1.1.1.1" title="Select new data " response="You entered select new filter"> 
      <action>Filter</action> 
     </HierarchyMenuItem> 
     <HierarchyMenuItem id="1.1.1.2" title="Navigate node" response="You entered select node"> 
      <action description="Current Filter is ">Hierarchy</action> 
      <HierarchyLevel level="1" name="One" navigateHierarchy="true"> 
       <action>RootAction</action> 
       <Option title="Select a Country"> 
        <OptionChoices id="1" title="One1" refNode="ForOne1" /> 
        <OptionChoices id="2" title="One2" refNode="ForOne2" /> 
        <OptionChoices id="3" title="One3" refNode="ForOne3" /> 
        <OptionChoices id="4" title="One4" refNode="ForOne4" /> 
       </Option> 
      </HierarchyLevel> 
    </HierarchyMenuItem> 
    </MenuOption> 
    <MenuOption id="1.2" title="Adhoc Data"> 
     <Option> 
      <OptionChoices id="1" title="Ad1" refNode="ForAdOne1" /> 
      <OptionChoices id="2" title="Ad2" refNode="ForAdOne2" /> 
      <OptionChoices id="3" title="Ad3" refNode="ForAdOne3" /> 
      <OptionChoices id="4" title="Ad4" refNode="ForAdOne4" /> 
     </Option> 
    </MenuOption> 
    <MenuOption id="1.3" title="(quit)"> 
    </MenuOption> 
</rootmenu> 

서버 -

function getXMLData(callback) { 
    var request = require('request'); 
    var DOMParser = require('xmldom').DOMParser; 
    var simpleconvertxml = require('simpleconvert-xml'); 
    request('http://demo.in/RefactoredXML.xml', function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      var xmlnode = new DOMParser().parseFromString([body].join('\n'), 'text/xml'); 
      var myNumber = simpleconvertxml.getXMLAsObj(xmlnode); 
      treeRoot = tree.parse(myNumber.rootmenu); 
      callback(treeRoot); 
     } 
    }) 
} 

데이터 2. 애드혹를 1.company 표시해야 내 첫 봇 전화

bot.dialog('/menu', [ 
    function (session, args) { 
     getXMLData(function (treeRoot) { 
      //session.send('node place:'+treeRoot.model.title); 
      var firstChild = []; 
      for (var i = 0; i < treeRoot.model.MenuOption.length; i++) { 
       if(treeRoot.model.MenuOption[i].title !='' && treeRoot.model.MenuOption[i].title != undefined && treeRoot.model.MenuOption[i].title != null) { 
        firstChild.push(treeRoot.model.MenuOption[i].title); 
       } 
      } 
      if(firstChild.length > 0) { 
       builder.Prompts.choice(session, treeRoot.model.description,firstChild); 
// it shows builder.Prompts.choice(session, "What scenario would you like to run? ", "company data|adhoc data|(quit)"); 
      } else { 
       session.send('Something went wrong. You can use the back or top command.'); 
      } 
     }); 
    }, 
    function (session, results) { 
     if (results.response && results.response.entity != '(quit)') { 
      session.userData.profile.treeSelectdNodeTitle = results.response.entity; 
      getXMLData(function (treeRoot) { 
       for (var i = 0; i < treeRoot.model.MenuOption.length; i++) { 
        if(treeRoot.model.MenuOption[i].title == session.userData.profile.treeSelectdNodeTitle) { 
         session.userData.profile.treeSelectdNodeId  = treeRoot.model.MenuOption[i].id; 
         session.userData.profile.treeSelectdResponse = treeRoot.model.MenuOption[i].response; 
        } 
       } 
       session.send('resp ' + session.userData.profile.treeSelectdResponse); 
     if(treeRoot.hasChildren()) { 
       session.send('in the children'); 
       session.beginDialog('/get Tree Node'); 
      } else { 
       session.send('in the title'); 
       session.beginDialog('/'+ treeRoot.model.title); 
      } 
      }); 

     } else { 
      // Exit the menu 
      session.endDialog(); 
     } 
    }, 
    function (session, results) { 
     // The menu runs a loop until the user chooses to (quit). 
     session.replaceDialog('/menu'); 
    } 
]).reloadAction('reloadMenu', null, {matches: /^menu|show menu|top|top menu/i}); 

메뉴 대화 호출에서 XML 읽기 데이터 3. (종료)하지만 그것만을 보여주는 1.company 데이터 2.adhoc 데이터 및 문제는 메뉴에서 사용자가 Compan으로 1 옵션을 선택한 경우입니다 y 데이터는 treeRoot.hasChildren() 조건으로 이동하지 않습니다. getTreeNode와

bot.dialog('/get Tree Node', [ 
    function(session,agrs) { 
     getTreeNode(session); 
    } 
]); 


function getTreeNode(session) { 
    session.send("in tree "+ session.userData.profile.treeSelectdNodeId); 
    getXMLData(function(treeRoot) { 
     var nextLevel = treeRoot.first(function (node) { 
      return node.model.id === session.userData.profile.treeSelectdNodeId; 
     }); 
     session.send('selected title '+ nextLevel.model.HierarchyMenuItem[0].title); 
     /* var secondListChild = []; 
     for(var i = 0; i < nextLevel.model.HierarchyMenuItem.length; i++) { 
      if(nextLevel.model.HierarchyMenuItem[i].title !='' && nextLevel.model.HierarchyMenuItem[i].title != undefined && nextLevel.model.HierarchyMenuItem[i].title != null) { 
       secondListChild.push(nextLevel.model.HierarchyMenuItem[i].title); 
      } 
     } 
     if(secondListChild.length > 0) { 
      builder.Prompts.choice(session, nextLevel.model.description,secondListChild); 
     } else { 
      session.send('Something went wrong. You can use the back or top command.'); 
     } */ 
    }); 
} 

문제 session.send있다 ('선택한 타이틀'+ nextLevel.model.HierarchyMenuItem [0] .title); ^ 형식 오류 : 나는 XML 구문 분석 NPM 및 변경이 ....

을 정의되지 않은

답변

0

있어 솔루션의 특성 '모델'을 읽을 수 없습니다 그 .. 나를 위해 일하는

var parse  = require('xml-parser'); 
var inspect  = require('util').inspect; 
function getXMLData(callback) { 
    var request = require('request'); 
    request('http://ztdemo.headfitted.in/RefactoredXML.xml', function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      var obj = parse(body); 
      //console.log(inspect(obj, { colors: true, depth: Infinity })); 
      //callback(treeRoot); 

      treeRoot = tree.parse(obj.root); 
      callback(treeRoot); 
     } 
    }) 
}