我的应用程序允许用户讲麦克风,并且该程序将与用户交谈。我在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");