从XML文件中选择随机节点



我的应用程序允许用户讲麦克风,并且该程序将与用户交谈。我在XML文件中保存了响应,当用户谈话时,我希望该程序在XML文件中检查并在该部分中显示一个随机节点。以下是我的XML文件的样子:

<?xml version="1.0" encoding="utf-8" ?>
<MarcusXMLFile xmlns:Responses="http://www.rewardstrike.com/XMLFile1.xml"">
  <response>
    <posanswer>
      <answer>Yes, sir.</answer>
      <answer>Right away.</answer>
    </posanswer>
  </response>
</MarcusXMLFile>

我选择一个随机节点的代码是:

private void Responses()
{
    string query = String.Format("http://www.rewardstrike.com/XMLFile1.xml");
    XmlDocument Responses = new XmlDocument();
    Responses.Load(query);
    XmlNode channel = Responses.SelectSingleNode("MarcusXMLFile");
    XmlNodeList nodes = Responses.SelectNodes("MarcusXMLFile/response");
    try
    {
         XmlNodeList positiveresponses = Responses.SelectNodes("./posanswer/answer");
         foreach (XmlNode ans in positiveresponses.Cast<XmlNode>().OrderBy(elem => Guid.NewGuid()))
         {
             response = ans.InnerText;
         }
         QEvent = "positiveresponse";
    }
    catch { }
}

我致电事件的代码是:

case "Hello":
case "Hello Jarvis":        
     Responses();
     if (QEvent == "positiveresponse")
     {
              JMARCUS.Speak(response);
     }
     break;

但是,当我与应用程序交谈时,这给了我一个错误,说他应该在无效的情况下讲话。有什么想法吗?

您的第二个Responses.SelectNodes找不到节点,因此positiveresponses没有节点,foreach环路没有迭代,并且response从未分配一个值。

>

尝试更改:

XmlNodeList positiveresponses = Responses.SelectNodes("./posanswer/answer");

to:

XmlNodeList positiveresponses
    = Responses.SelectNodes("MarcusXMLFile/response/posanswer/answer");

最新更新