【发布时间】:2020-10-06 07:27:24
【问题描述】:
我正在编写格式化 XML 文件的代码,以便子文件夹节点实际上嵌套在其父节点中。源 XML 将每个文件夹作为根中的单独子节点,而不是像您期望的那样在其主文件夹中包含子文件夹的正确树。这个问题的代码是:
// Load original XML
string sFile = "PathFile";
XmlDocument doc = new XmlDocument();
doc.Load(sFile);
var n = doc.DocumentElement.SelectNodes ("//*"); // Load all nodes into nodelist n
// int nCount = n.Count; // If uncommented code works
foreach(XmlNode x in n)
{ rest of the code }
现在我的代码可以正常工作,但只是有时,即使在两次运行之间没有更改任何内容。我已将其缩小为:在 Visual Studio 中调试代码时,如果我只是从头到尾运行代码,则会出错。如果我中途中断并查看 XmlNodelist n 中的属性(通过将光标悬停在它上面并查看元素计数)它确实有效。 发现这一点后,我添加了
int nCount = n.Count;
行,现在代码从头到尾在无人监督的情况下运行。
这里发生了什么以及解决此问题的正确方法是什么?注意:doc.LoadXml 不适用于此特定文件。
谢谢你,
托马斯
【问题讨论】:
-
以下工作有效吗? : XmlNode[] n = doc.DocumentElement.SelectNodes("//*").ToArray();
-
@jdweng
XmlNodeList没有.ToArray()方法,也不能在其上调用Linq.ToArray()扩展方法,因为它没有实现IEnumerable<T>。
标签: c# enumerate enumerable xml-attribute xmllist