我正在创建一个创建或打开xml文件的类:
namespace QTabs
{
public class DataLayer
{
XmlDocument XMLDocObject = new XmlDocument();
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile storageFile;
string xmlFile = "DataStore.xml";
public DataLayer()
{
loadXML();
}
public async void loadXML()
{
//if XML doc doesnt exist create it
try
{
storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(xmlFile);
}
catch (FileNotFoundException)
{
storageFile = null;
}
if (storageFile == null)
{
storageFile = await storageFolder.CreateFileAsync(xmlFile);
// Manipulate the xml document.
var root = XMLDocObject.CreateElement("SyncTimes");
XMLDocObject.AppendChild(root);
var childTag1 = XMLDocObject.CreateElement("id");
var childTag2 = XMLDocObject.CreateElement("dateTime");
root.AppendChild(childTag1);
root.AppendChild(childTag2);
await XMLDocObject.SaveToFileAsync(storageFile);
}
else
{
storageFile = await storageFolder.GetFileAsync(xmlFile);
}
}
public async void addSyncTime()
{
XmlElement x1 = XMLDocObject.CreateElement("SyncTime");
XmlElement x11 = XMLDocObject.CreateElement("id");
x11.InnerText = "1";
x1.AppendChild(x11);
XmlElement x12 = XMLDocObject.CreateElement("dateTime");
x12.InnerText = DateTime.Now.ToString();
x1.AppendChild(x12);
await XMLDocObject.SaveToFileAsync(storageFile);
}
}
}
我的问题是使用上面的addSyncTime()方法。运行时,它会导致XML文件为空,包括删除创建时添加的元素。
我做错了什么?
答案 0 :(得分:1)
很难说没有a good, minimal, complete code example可靠地再现问题。但是,您的代码似乎有两个不同的问题:
XMLDocObject
引用空文档。 (事实上,storageFile != null
案例似乎完全不合适;它不仅没有像我期望的那样从storageFile
加载XML,它实际上重新检索 {通过再次调用storageFile
来对象{1}}。GetFileAsync()
方法会创建新元素,但绝不会将它们添加到XML文档树中。鉴于上述情况,我希望程序行为为:
在任何情况下,我都不希望添加新的 addSyncTime()
元素。第一次运行该程序时,您将获得根SyncTime
元素及其初始SyncTimes
和id
子元素,但不会获得任何dateTime
元素。之后,XML文档将被清空,您仍然无法获得任何新的SyncTime
元素。
如果上述问题无法解决您的问题,请提供一个很好的代码示例,如我在上面提供的链接中所述。