从 xml 元素填充列表框时遇到问题

Having trouble populating listbox from xml elements

XML如下:

<?xml version="1.0" encoding="utf-8"?>
<Folder_Settings>
  <Documents>Checked</Documents>
  <Pictures>Not Checked</Pictures>
  <Music>Checked</Music>
  <Videos>Not Checked</Videos>
  <Downloads>Checked</Downloads>
  <Contacts>Checked</Contacts>
  <Favorites>Not Checked</Favorites>
  <Other>Checked</Other>
  <OtherFolderSettings>C:\Users\Asus\Desktop\revouninstaller-portable</OtherFolderSettings>
  <OtherFolderSettings>D:\Personal Website</OtherFolderSettings>
  <OtherFolderSettings>D:\testing</OtherFolderSettings>
  <OtherFolderSettings>C:\Users\Asus\Desktop\revouninstaller-portable</OtherFolderSettings>
  <OtherFolderSettings>C:\Users\Asus\.eclipse</OtherFolderSettings>
</Folder_Settings>

我想获取 OtherFolderSettings 中的信息并将其填充到列表框中。我正在使用的代码有点工作,但它只将前两个文件夹字符串添加到列表框中。预先感谢您的所有帮助和建议。

代码:

 var applicationSettingsXML = new XmlDocument();
            var XMLFileStream = new FileStream("Settings.xml", FileMode.Open);
            applicationSettingsXML.Load(XMLFileStream);

            var folderList = applicationSettingsXML.GetElementsByTagName("Folder_Settings");
            for (var i = 0; i <= folderList.Count; i++)
            {

                listBox1.Items.Add( applicationSettingsXML.GetElementsByTagName("OtherFolderSettings")[i].InnerText);

            }

            XMLFileStream.Close();

您的代码无法正常工作的原因是您的循环是:

for (var i = 0; i <= folderList.Count; i++)

... 其中 folderListFolder_Settings 元素的列表。只有其中一个,所以你要迭代两次。您实际上没有使用 folderList[i] 是件好事,否则您将在第二次迭代时出界。像这样的循环应该 总是 使用 < 而不是 <=.

但是,我强烈建议使用 LINQ to XML 而不是 XmlDocument - 它使一切变得更加简单。我还建议尽可能使用 foreach 循环:

var doc = XDocument.Load("Settings.xml");
foreach (var element in doc.Root.Elements("OtherFolderSettings))
{
    listBox1.Items.Add(element.Value);
}

(哦,还有使用using语句来干净地关闭资源...)