【发布时间】:2017-07-15 05:09:06
【问题描述】:
我正在尝试仅删除 ID 与 lstBox 选定索引匹配的 XML 元素 <Contact>。代码运行,然而,它实际上删除了我的 XML 文件中的所有内容,所以我留下了一个空的 txt 文件。我有这样的代码:
private async void btnDeleteContact_Click(object sender, RoutedEventArgs e)
{
StorageFile file = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("Contacts.xml");
XDocument xdoc = XDocument.Load(file.Path);
if (lstBox.SelectedIndex != -1)
{
xdoc.Element("Contacts")
.Elements("Contact")
.Where(x => (string)x.Attribute("ID") == lstBox.SelectedItem.ToString()).Remove();
lstBox.SelectedIndex = -1;
updateXMLFile(xdoc);
}
}
这是我的 XML 文件
<?xml version="1.0" encoding="UTF-8" ?>
<Contacts>
<Contact>
<ID>salpea</ID>
<FirstName>Sally</FirstName>
<LastName>Pearson</LastName>
<Mobile>0431529562</Mobile>
<Email>sallyp@hotmail.com</Email>
</Contact>
<Contact>
<ID>gresul</ID>
<FirstName>Greg</FirstName>
<LastName>Sullivan</LastName>
<Mobile>0432928381</Mobile>
<Email>gregsul@outlook.com</Email>
</Contact>
<Contact>
<ID>chrmac</ID>
<FirstName>Christie</FirstName>
<LastName>Mack</LastName>
<Mobile>0421231231</Mobile>
<Email>christiemack@gmail.com</Email>
</Contact>
</Contacts>
列表框选择为蓝色。
不确定是否相关,但这是我的整个文件 here 的 pastebin
感谢您对此事的任何帮助。
【问题讨论】:
-
你在用c#吗?
-
在您的 XML 文件中,
<ID>...</ID>是 XML 元素 而不是 XML 属性,因此(string)x.Attribute("ID") == lstBox.SelectedItem.ToString()将始终为 false。而且,事实上,在测试中似乎没有任何东西被删除。所以我怀疑问题实际上出在updateXMLFile(xdoc);。你能分享那个代码吗? -
演示小提琴在尝试删除 ID 为
"chrmac": dotnetfiddle.net/T6ffsH 的元素时显示未删除任何内容 -
您好,感谢您的回复。整个代码在这里pastebin.com/ftjtie8A
-
在
updateXMLFile()中,您可以捕获并吞下所有异常。与其这样做,不如报告或记录它们!如果FileIO.WriteTextAsync(file, xdoc.ToString());以某种方式抛出异常,那么结果可能是一个不完整的文件。