2017-01-29 6 views
0

Mein Plan ist es, den XML-Code zu verwenden, um zufällig einen der event Knoten auszuwählen und dann einige der Knoten für jeden choice Knoten den Zeichenfolgen zuzuordnen (es gibt schließlich mehr choice Knoten in jedem Ereignis). Bevor ich jedoch alle Entscheidungen treffe, habe ich einen Haken gefunden.Problem mit SelectSingleNode

Ich benutze dieses Stück Code:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("XMLFile1.xml"); 
XmlNode mainNode = xmlDoc.SelectSingleNode("events"); 

XmlNodeList nodeList = mainNode.ChildNodes; 
int random = Program.rand.Next(0, nodeList.Count); 

XmlNode optionNode = mainNode.SelectSingleNode(string.Format("event[@id='{0}']", random)); 
Console.WriteLine(mainNode.InnerText); 
Console.WriteLine(optionNode.InnerText); 

, die in einem NullReferenceException in der letzten Zeile führt. Hier

ist die XML:

<events> 
    <event id="333"> 
     <name>Test event 1</name> 
     <text>Something something</text> 
    <choices> 
     <choice id="1"> 
      <choicebutton>Button 1 from choice 1</choicebutton> 
      <choiseresulttext>Something happened</choiseresulttext> 
     </choice> 
     <choice id="2"> 
      <choicebutton>Button 2 from choice 1</choicebutton> 
      <choiseresulttext>Something else happened</choiseresulttext> 
     </choice> 
    </choices> 
</event> 
<event id="2"> 
    <name>Test event 2</name> 
    <text>Something something more</text> 
    <choices> 
     <choice id="1"> 
      <choicebutton>Button 1 from choice 2</choicebutton> 
      <choiseresulttext>Something happened</choiseresulttext> 
     </choice> 
     <choice id="2"> 
      <choicebutton>Button 2 from choice 2</choicebutton> 
      <choiseresulttext>Something else happened</choiseresulttext> 
     </choice> 
    </choices> 
</event> 

Die Console.WriteLine(mainNode.InnerText); Linie korrekt ausgeführt, so dass ich davon ausgehen, das Problem mit der Art, wie ich den Knoten optionNode zuweisen. Habe ich in dieser Aussage einen Fehler gemacht, oder ist das ein größeres Missverständnis meinerseits?

+0

'nodeList.Count - 1 ' –

+0

erste Veranstaltung hat id 333. Aus id =„0“beginnen sollte, wenn Sie zufällig IDs von 0 verwenden von Ereignissen zu zählen –

+0

Dank für den Hinweis meiner Dummheit aus, @ Sergey Berezovskiy. :) – Weathervane

Antwort

0
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("XMLFile1.xml"); 
XmlNode mainNode = xmlDoc.SelectSingleNode("events"); 

XmlNodeList nodeList = mainNode.ChildNodes; 
int random = Program.rand.Next(0, nodeList.Count - 1); 

XmlNode optionNode = nodeList[random]; 
Console.WriteLine(mainNode.InnerText); 
Console.WriteLine(optionNode.InnerText); 
Verwandte Themen