我的应用程序允许用户对着麦克风讲话,程序将与用户对话。我将响应保存在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;
然而,当我对应用程序说话时,它给我一个错误,说明他应该以null的形式发言。有什么想法吗?
答案 0 :(得分:1)
您的第二个Responses.SelectNodes
找不到节点,因此positiveresponses
没有节点,foreach
循环没有任何内容可以迭代,response
永远不会分配值。< / p>
尝试更改:
XmlNodeList positiveresponses = Responses.SelectNodes("./posanswer/answer");
要:
XmlNodeList positiveresponses
= Responses.SelectNodes("MarcusXMLFile/response/posanswer/answer");