0

私はこのコードを持っています:

XmlDocument doc = new XmlDocument();
doc.Load("file.xml");

XmlNodeList nodes = doc.SelectNodes("//myElement");  // Line 4

for (int i = 0; i < 5; i++) // Line 6
{
    nodes[i].ParentNode.RemoveChild(nodes[i]);
}

doc.Save("output.xml");

4行目にブレークポイントを設定すると、プログラムは正常に機能します。ただし、それを超える行(6など)にブレークポイントを設定すると、object reference not set to instance of objectノードには1つのアイテムしかないため、エラーが発生します。

ブレークポイントなしで実行するたびにプログラムがクラッシュします。ただし、4行目にブレークポイントを設定すると、ノードの数は適切に85なり、すべてが完全に機能します。

Thread.Sleep(10000)4行目の前後で行っても、ノードが1つしか見つからないため、プログラムがクラッシュします。

なぜこれなのか誰か知っていますか?

4

1 に答える 1

0

コードを次のように変更したところ、ブレークポイントの有無にかかわらず、100% の確率で問題なく動作するようになりました。

XDocument doc = XDocument.Load("file.xml");

List<XElement> nodes = doc.Descendants("myElement").ToList();

for (int i = 0; i < 5; i++)
{
    nodes[i].Remove();
}

doc.Save("output.xml");

なぜSelectNodes私に問題を引き起こしたのかわかりませんが、この解決策はすべてを修正するようです.

于 2012-11-05T21:32:11.557 に答える