UWPを使用してストレージファイルに格納されたXMLファイルから要素を削除しようとしています。私の問題は、doc.Saveコマンドは、ファイルを置き換えるのではなく、ファイルの最後に完全なドキュメントを追加するだけです。 私はsom replaceオプションを検索しようとしましたが、成功しませんでした。UWPを使用してXMLファイルを置換するXMLファイル内の要素
質問は実際には2つの部分です: 1. XMLファイルから要素を削除して完全に置き換える方がいいですか? 2.ファイルを置き換えない場合はどうすればいいですか?
public async Task DeleteSingleById(int id)
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync("Data.xml");
Stream stream = await file.OpenStreamForWriteAsync();
using (stream)
{
XDocument doc = XDocument.Load(stream);
doc.Descendants("Companies").Elements("Company").FirstOrDefault(x => x.Elements("Id").Any(e => e.Value == id.ToString())).Remove();
doc.Save(stream);
}
}
更新1: これは、問題を解決しますが、それは見栄えしません。改善に関するコメントは素晴らしいものになります。
public async Task DeleteSingleById(int id)
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync("Data.xml");
Stream stream = await file.OpenStreamForWriteAsync();
XDocument doc = XDocument.Load(stream);
using (stream)
{
doc.Descendants("Companies").Elements("Company").FirstOrDefault(x => x.Elements("Id").Any(e => e.Value == id.ToString())).Remove();
}
await file.DeleteAsync();
file = await folder.CreateFileAsync("Data.xml", CreationCollisionOption.ReplaceExisting);
stream = await file.OpenStreamForWriteAsync();
using (stream)
{
doc.Save(stream);
}
}
実際これは機能しませんでした。ファイルの先頭にすべてを書き込んだだけで、最後に上書きされていないものはすべて残しました。 –
@SamuelWahlbergええ、問題を解決しない開始に位置をリセットするだけです。ここでは、書き換えのために現在のストリームをクリアする必要があります。私は私の答えを更新しました、それは今働くことができるはずです。それをキャッチするためにありがとう。 ;) –
このアップデートで問題が解決しました。ありがとうございます! –