2012-05-29 60 views
1

我有以下格式的XML文件;使用索引选择XML元素

<root> 

<entry> 
<details> 
</entry> 

<entry> 
<details> 
</entry> 
... 
</root> 

我没有任何属性和我在ListBox控件允许复制和删除项显示细节领域。

因此,如果用户删除了列表框中的第二个条目,则需要完全删除xml文件中的第二个条目。

有没有办法做到这一点?

目前,我正在使用Linq-to-XML写入数据。

编辑:我忘了提及ListBox的选择模式 - 它是MultiExtended。

+0

对不起,它花了一些时间来检查这个...我检查了代码的现在。 – vs2010noob

回答

3

下面是简单的代码加载,删除索引条目,然后保存文件。

XElement root = XElement.Load(file); 
root.Elements("entry").ElementAt(index).Remove(); 
root.Save(file); 

匹配多个:

int[] match = new int[] { 1, 10, 25, 33 }; 
var matches = root.Elements("entry").Where((x, i) => match.Contains(i)); 
foreach (var e in matches.ToList()) e.Remove(); 
+0

这将工作多个元素?我收到了一些意想不到的结果。 – vs2010noob

+0

意外可能是因为你显示的内容不再与列表相匹配。在删除任何内容之前,你需要做的是按索引匹配它们,然后一次删除它们。 –

2

这是一个非常宽泛的定义,但下面应该工作:

// untested 
var entries = xDoc.Root.Elements("entry").ToList(); 
entries[selectedIndex].Remove(); 
xDoc.Save(...); 
+0

这是否适用于多个元素?我收到了一些意想不到的结果。 – vs2010noob