我在发现如何使用 LINQ 使用列表框中的值更新 XML 文件时遇到了一些麻烦。
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 文件中的“文件”元素的值进行比较,然后适当地添加/删除/更新 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。
知道为什么这不会写出列表框中的所有三个项目吗?