以下のコードを使用して、データを Windows Phone の xml ファイルに保存しています。最初に、ターゲット xml ファイルが分離ストレージに存在するかどうかを確認しています。存在しない場合は、ファイルを作成し、必要な要素データを追加しています。ファイルが存在する場合は、最初に要素が既に存在するかどうかを確認し、存在する場合は属性値を更新し、そうでない場合は新しい要素を xml ファイルに追加します。
私が見ている問題は、既に要素が存在し、属性を更新しようとしている場合(コードの下)-新しいデータで追加された余分な要素が表示され、古いデータがまだファイルに存在することです。追加する代わりに更新していません。
using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (storage.FileExists(fileName))
{
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(fileName, FileMode.Open, storage))
{
XDocument doc = XDocument.Load(isoStream);
bool isUpdated = false;
foreach (var item in (from item in doc.Descendants("Employee")
where item.Attribute("name").Value.Equals(empName)
select item).ToList())
{
// updating existing employee data
// element already exists, need to update the existing attributes
item.Attribute("name").SetValue(empName);
item.Attribute("id").SetValue(id);
item.Attribute("timestamp").SetValue(timestamp);
isUpdated = true;
}
if (!isUpdated)
{
// adding new employee data
doc.Element("Employee").Add(
new XAttribute("name", empName),
new XAttribute("id", id),
new XAttribute("timestamp", timestamp));
}
doc.Save(isoStream);
}
}
else
{
// creating XML file and adding employee data
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(fileName, FileMode.Create, storage))
{
XDocument doc = new XDocument(new XDeclaration("1.0", "utf8", "yes"),
new XElement("Employees",
new XElement("Employee",
new XAttribute("name", empName),
new XAttribute("id", id),
new XAttribute("timestamp", timestamp))));
doc.Save(isoStream, SaveOptions.None);
}
}
}