0
我想使用元素索引從XML列表中刪除用戶選擇的元素。例如:如何通過索引從xml中刪除元素
foreach (int index in indexes)
{
Root.Descendants("book").ElementAt(index).Remove();
}
但是這會拋出一個IndexOutOfRangeException
。任何建議表示讚賞。
我想使用元素索引從XML列表中刪除用戶選擇的元素。例如:如何通過索引從xml中刪除元素
foreach (int index in indexes)
{
Root.Descendants("book").ElementAt(index).Remove();
}
但是這會拋出一個IndexOutOfRangeException
。任何建議表示讚賞。
隨着您刪除項目,剩餘「書籍」元素(及其索引)的數量發生變化。您可能在索引數組中有0,1,2,3,但是一旦您刪除第一個項目,您的第四個索引(3)現在超出範圍。如果您的索引是連續的,則可以反轉刪除元素的順序,因此當前索引永遠不會「超出範圍」。
試試這個:
for (int i = indexes.Length - 1; i >= 0; i--)
{
Root.Descendants("book").ElementAt(indexes[i]).Remove();
};
不過,你提到要刪除「用戶選擇」的元素,所以我猜你的元素可能會以隨機順序。相反,你可能想嘗試這樣的事情:
IEnumerable<XElement> books = Root.Descendants("book");
IList<XElement> booksToRemove = new List<XElement>(indexes.Length);
foreach (int index in indexes)
{
booksToRemove.Add(books.ElementAt(index));
}
foreach (XElement book in booksToRemove)
{
book.Remove();
}
現在你不必在意刪除它們之前元素或索引在什麼順序。
當您刪除項目時,剩餘「書籍」元素(及其索引)的數量會發生變化。你可能在你的索引數組中有0,1,2,3,但是一旦你刪除了第一項,你的第四個索引(3)現在超出了範圍。你看到你的邏輯錯誤在哪裏? – 2012-08-06 19:12:14
是的,謝謝,但我找不出解決方案。 – 2012-08-06 19:16:38
如果索引是連續的順序,請嘗試反轉刪除它們的順序。 – 2012-08-06 19:18:40