Doc.GetElementsByTagName("schema")
Возвращает итератор к узлу, который также является ленивым оценщиком. При изменении значения XmlElement
итерация становится недействительной, потому что вы изменили данные, над которыми работал итератор. Попробуйте добавить полученный элемент из GetElementsByTagName()
в некоторый List<XmlElement>
, а затем перечислить этот список и зашифровать каждый элемент.
Дополнительная информация добавлена
Это очень просто, если у вас есть список
List<int> n =new List<int>(new int{1,2,3});
//now if iterate it
foreach(int i in n){
n.Add(i)
}
Цикл изменяет список, который он перечисляет, поэтому он выдаст ошибку, аналогичную приведенной в вашем случае. Вы можете решить проблему, выполнив
foreach(int i in n.ToArray()){
n.Add(i)
}
, поскольку в этом случае неподвижное изображение n захватывается перед циклом, и я могу свободно изменять его внутри цикла. Ваш цикл повторяется по дереву, пока вы меняете его при перечислении. Это не правильно и даст вам исключение. Вы должны сначала собрать все элементы, которые вы хотите изменить в списке, а затем перечислить этот список и зашифровать их. Это также обновит исходный XML-документ.