2012-05-29 4 views
1

У меня есть XML-файл в следующем формате;Выбор XML-элементов с использованием индекса

<root> 

<entry> 
<details> 
</entry> 

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

У меня нет никаких атрибутов и отобразить поле данных в элементе управления ListBox, который позволяет копировать и удаление элементы.

Итак, если пользователь удаляет вторую запись в списке, вторая запись в файле xml должна быть полностью удалена.

Есть ли способ сделать это?

В настоящее время я использую Linq-to-XML для записи данных.

EDIT: Я забыл упомянуть режим выбора 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

Смежные вопросы