リストボックスの値で XML ファイルを更新するために LINQ を使用する方法を見つけるのに苦労しています。
XML ファイルは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<scripts>
<script id="3">
<name>Test</name>
<author>Test Author</author>
<filestoProcess>
<file>testfile.jpg</file>
<file>testfile1.jpg</file>
</filestoProcess>
</script>
</scripts>
そして、次を使用して「名前」フィールドと「作成者」フィールドを更新しています。
XDocument xDoc = XDocument.Load("..\\..\\XMLTest.xml");
XElement uElem = xDoc.Descendants("script").Where(t => (int)t.Attribute("id") == id).FirstOrDefault();
uElem.SetElementValue("name", txtScriptTitle.Text);
uElem.SetElementValue("author", cmboAuthor.Text);
ListBox の値を XML ファイルの "file" 要素の値と比較し、XML ドキュメントの "file" 値を適切に追加/削除/更新するにはどうすればよいですか?
更新: 2 つのリストを比較する代わりに、XML から「ファイル」要素を削除してから、リストボックスに保持されている値を追加し直す方がおそらく簡単です。
このコードを使用すると、すべての「ファイル」要素を削除できますが、リストボックスから値を追加しようとすると、最後の値のみが XML ファイルに書き込まれます。
// Remove all "file" elements from XML
uElem.Descendants("file").ToList().ForEach(i => i.Remove());
// Now add the elements from the listbox
foreach (string s in lbFilesToProcess.Items)
{
uElem.Element("filestoProcess").SetElementValue("file", s);
}
たとえば、私のリストボックスには file2.jpg、file2.jpg、file3.jpg が含まれていますが、上記のコードを実行した後に XML ファイルを表示すると、file3.jpg しか表示されません。
これがリストボックスに保持されている 3 つの項目すべてを書き込まない理由は何ですか?