我在發現如何使用LINQ更新列表框中的值來更新XML文件時遇到了一些問題。更新列表框中的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);
我怎麼能對比較值的列表框值XML文件中的「文件」元素,然後相應地添加/刪除/更新XML文檔中的「文件」值?
更新: 比較兩個列表相反的,它可能是更容易去除來自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。
任何想法,爲什麼這不寫在列表框中的所有三個項目?
不** **相當確定要在這裏做... –
僅供參考,你可以通過做xDoc.Descendants(「腳本」)減少你的LINQ的要求是什麼FirstOrDefault (t =>(int)t.Attribute(「id」)== id);而不是xDoc.Descendants(「script」)。where(t =>(int)t.Attribute(「id」)== id).FirstOrDefault(); – orel