无法从xml元素填充列表框

时间:2015-05-20 17:27:13

标签: c# xml winforms listbox

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();

1 个答案:

答案 0 :(得分:0)

您的代码无效的原因是因为您的循环是:

folderList

...其中Folder_SettingsfolderList[i]元素的列表。只有其中一个,所以你要迭代两次。你实际上没有使用<这是一个很好的工作,因为否则你将在第二次迭代中超出范围。像这样的循环应该总是使用<=而不是XmlDocument

但是,我强烈建议使用LINQ to XML而不是foreach - 它使一切变得更加简单。我还建议您尽可能使用var doc = XDocument.Load("Settings.xml"); foreach (var element in doc.Root.Elements("OtherFolderSettings)) { listBox1.Items.Add(element.Value); } 循环:

using

(哦,并使用{{1}}语句干净地关闭资源......)