Мне кажется, я обнаружил странную ошибку, следующую:
Я хочу удалить первые два узла в XmlNodeList.
Я знаю, что могут быть другие способы сделать это (безусловно, есть), но это причина, по которой один из сегментов кода работает, а другой - нет (разница заключается в строке Count), что яинтересует.
var strXml = @"<food><fruit type=""apple""/><fruit type=""pear""/><fruit type=""banana""/></food>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(strXml);
XmlNodeList nlFruit = doc.SelectNodes("food/fruit");
for(int i = 0; i < 2; i++)
{
// This produces a null reference exception:
nlFruit[i].ParentNode.RemoveChild(nlFruit[i]);
}
Однако, если я посчитаю количество узлов в XmlNodeList, это сработает, и у меня останется желаемый результат:
var strXml = @"<food><fruit type=""apple""/><fruit type=""pear""/><fruit type=""banana""/></food>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(strXml);
XmlNodeList nlFruit = doc.SelectNodes("food/fruit");
// Count the nodes..
Debug.WriteLine(nlFruit.Count);
for(int i = 0; i < 2; i++)
{
nlFruit[i].ParentNode.RemoveChild(nlFruit[i]);
}
// doc is now: <food><fruit type="banana" /></food>