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错误,因为节点中只有一个项目。

每次我在没有断点的情况下运行它时程序都会崩溃。但是,如果我在第 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 回答