我正在创建一个简单的待办事项列表,并希望将任务存储在XML文件中。我的XML文件如下所示:
<Task>
<Title>Make a List</Title>
<Description>I should make a List!</Description>
<Done>false</Done>
</Task>
每个任务都在<Task>
标签中,用于存储标题,说明以及是否已完成。
加载表单时,我想使用
为每个任务生成一个复选框 Text = <Title>
ToolTip = "<Description>"
Checked = <Done>
现在我的代码看起来像这样:
void MainFormLoad(object sender, EventArgs e)
{
var doc = XDocument.Load(Application.StartupPath + "\\tasker.xml");
var Title = doc.Root.Descendants().Single(d => d.Name == "Title").Value;
var Description = doc.Root.Descendants().Single(d => d.Name == "Description").Value;
var Done = doc.Root.Descendants().Single(d => d.Name == "Done").Value;
MessageBox.Show(Title.ToString() + Environment.NewLine + Description.ToString() ); // Just for Testing
}
这很有用,但只适用于一项任务。如何为多个任务添加复选框?
答案 0 :(得分:3)
首先,您需要在XML文件中执行多项任务,例如
<Tasks>
<Task>
...
</Task>
<Task>
...
</Task>
</Tasks>
然后你可以迭代所有这样的任务:
var doc = XDocument.Load("...");
var tasks = doc.Root.Elements("Task")
.Select(x => new {
Title = (string) x.Element("Title"),
Description = (string) x.Element("Description"),
Done = (bool) x.Element("Done");
});
foreach (var task in tasks)
{
// Use task.Title etc
}
你 没有使用单独的局部变量,但对我来说它看起来更简单。您可能还想为任务创建一个命名类,而不是使用我在此处创建的匿名类型。
请注意,元素的替代方法是为每个任务使用数据属性。
答案 1 :(得分:0)
首先,您可以创建一个任务主元素包装任何任务元素,然后遍历每个元素。 然后XML看起来像:
<Tasks>
<Task>
<Title>Make a List</Title>
<Description>I should make a List!</Description>
<Done>false</Done>
</Task>
<Task>
<Title>Make a Second List</Title>
<Description>I should make a Second List!</Description>
<Done>false</Done>
</Task>
</Tasks>
加载XDocument后,迭代只适用于每个:
foreach (var child in doc.Root.Descendants("Task"))
{
var Title = child.Descendants().Single(d => d.Name == "Title").Value;
var Description = child.Descendants().Single(d => d.Name == "Description").Value;
var Done = child.Descendants().Single(d => d.Name == "Done").Value;
}
希望对你有所帮助。