从xml文件中选择随机节点

时间:2014-01-30 03:25:13

标签: c# 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;

然而,当我对应用程序说话时,它给我一个错误,说明他应该以null的形式发言。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的第二个Responses.SelectNodes找不到节点,因此positiveresponses没有节点,foreach循环没有任何内容可以迭代,response永远不会分配值。< / p>

尝试更改:

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

要:

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