使用流保存 xml 文件会导致重复的根元素
Saving an xml file using stream results in a duplicate root elements
所以我试图打开一个 xml 文件,将 XElement 添加到根元素,然后保存它。除了我的 C# 代码:
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("UserPinouts.tpack", CreationCollisionOption.OpenIfExists);
using (var stream = await file.OpenStreamForWriteAsync())
{
XDocument doc = XDocument.Load(stream);
doc.Root.Add(new XElement(XElement.Parse(CurrentPinOut)));
doc.Save(stream);
Debug.WriteLine(doc.ToString());
stream.Flush();
}
给我以下 xml 文件:
<?xml version="1.0" encoding="utf-8" ?>
<RootElement>
<XElement1/>
</RootElement>
<?xml version="1.0" encoding="utf-8" ?>
<RootElement>
<XElement1/>
<XElement2/>
</RootElement>
而不仅仅是第二部分。我试过改变我添加 XElement 的方式,但我每次都得到这个,所以我猜这一定是我 open/close 流的方式有问题。我该如何解决这个问题?
尝试将流位置重置为开头,就在调用 Save()
方法之前:
stream.Position = 0;
doc.Save(stream);
我在旧 Windows Phone 问题中看到它解决了类似的问题。这些是其中的一些:1. Appending new XElement adds an entire XML to existing xml in stream, 2. updating an existing xml file in Windows Phone
所以我试图打开一个 xml 文件,将 XElement 添加到根元素,然后保存它。除了我的 C# 代码:
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("UserPinouts.tpack", CreationCollisionOption.OpenIfExists);
using (var stream = await file.OpenStreamForWriteAsync())
{
XDocument doc = XDocument.Load(stream);
doc.Root.Add(new XElement(XElement.Parse(CurrentPinOut)));
doc.Save(stream);
Debug.WriteLine(doc.ToString());
stream.Flush();
}
给我以下 xml 文件:
<?xml version="1.0" encoding="utf-8" ?>
<RootElement>
<XElement1/>
</RootElement>
<?xml version="1.0" encoding="utf-8" ?>
<RootElement>
<XElement1/>
<XElement2/>
</RootElement>
而不仅仅是第二部分。我试过改变我添加 XElement 的方式,但我每次都得到这个,所以我猜这一定是我 open/close 流的方式有问题。我该如何解决这个问题?
尝试将流位置重置为开头,就在调用 Save()
方法之前:
stream.Position = 0;
doc.Save(stream);
我在旧 Windows Phone 问题中看到它解决了类似的问题。这些是其中的一些:1. Appending new XElement adds an entire XML to existing xml in stream, 2. updating an existing xml file in Windows Phone