从 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++)
... 其中 folderList
是 Folder_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
语句来干净地关闭资源...)
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++)
... 其中 folderList
是 Folder_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
语句来干净地关闭资源...)