我有这个 XmlFile (tasks.xml):
<?xml version="1.0" encoding="utf-8"?>
<Tasks>
<Task>
<Id>dc77b03f-468c-4709-b8dc-4d9741c984dd</Id>
<Name>buy paper</Name>
<Category>inbox</Category>
<DueDate></DueDate>
<Project></Project>
<Context></Context>
<Note></Note>
<Created>03/16/2013 15:33:29</Created>
<Finished></Finished>
</Task>
</Tasks>
当我像这样更新元素时,一切正常:
try
{
var item = (CheckBox)sender;
dynamic itemDC = item.DataContext;
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.GetFileAsync("tasks.xml");
var readStream = await FileIO.ReadTextAsync(file);
using (var writeStream = await file.OpenStreamForWriteAsync())
{
XElement xElem = XElement.Parse(readStream);
IEnumerable<XElement> singleTask = from task in xElem.Elements("Task")
where (string)task.Element("Id") == itemDC.Id
select task;
foreach (XElement task in singleTask)
{
task.SetElementValue("Finished", DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/" + DateTime.Now.ToString("yyyy HH:mm:ss"));
}
xElem.Save(writeStream);
}
}
catch (Exception ex)
{
new MessageDialog(ex.Message).ShowAsync();
}
但是如果我想<Finnished>
再次编辑元素并将值设置为“”,它将在我的 XML 文件中生成两个错误的结束标记。
再次编辑代码:
try
{
var item = (CheckBox)sender;
dynamic itemDC = item.DataContext;
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.GetFileAsync("tasks.xml");
var readStream = await FileIO.ReadTextAsync(file);
using (var writeStream = await file.OpenStreamForWriteAsync())
{
XElement xElem = XElement.Parse(readStream);
IEnumerable<XElement> singleTask = from task in xElem.Elements("Task")
where (string)task.Element("Id") == itemDC.Id
select task;
foreach (XElement task in singleTask)
{
task.SetElementValue("Finished", "");
}
xElem.Save(writeStream);
}
}
catch (Exception ex)
{
new MessageDialog(ex.Message).ShowAsync();
}
<Finished>
编辑为“”后生成的 XML 错误:
<?xml version="1.0" encoding="utf-8"?>
<Tasks>
<Task>
<Id>dc77b03f-468c-4709-b8dc-4d9741c984dd</Id>
<Name>dnešní úkol</Name>
<Category>inbox</Category>
<DueDate></DueDate>
<Project></Project>
<Context></Context>
<Note></Note>
<Created>03/16/2013 15:33:29</Created>
<Finished></Finished>
</Task>
</Tasks> </Task>
</Tasks>
如果我再次使用与日期字符串相同大小的字符串进行编辑,一切正常,但清除“”值会导致该错误。
我花了很多时间来解决这个问题,但现在我不知道如何解决这个问题。
我做错了什么?