#c# #xml #linq #azure
#c# #xml #linq #azure
Вопрос:
У меня много XML-файлов в контейнере хранения Azure. Я написал код для удаления ненужных элементов данных из этих XML-файлов. Чтобы перечислить все XML-файлы в разных структурах папок, я использовал
var blobs = container.ListBlobs(prefix: <Root Location of Blobs>, useFlatBlobListing: true);
foreach (CloudBlockBlob blob in blobs)
И для анализа xml я использую Linq.
Проблема, с которой я сталкиваюсь, заключается в том, что существует несколько XML-файлов, в которых отсутствует правильный формат, или несколько XML-файлов, в которых нет закрывающих литералов. Я хочу перехватить исключение и пропустить этот XML-файл из обработки и перейти к следующему. Как я могу это сделать, используя блок Try catch ?
Исключение, которое я получаю, это System.Xml.XmlException
Ответ №1:
Попробуйте
foreach (CloudBlockBlob blob in blobs){
bool isError = false;
try
{
// do your code here;
}catch(Exception ex){
isError = true;
}
if(isError) continue;
}
Обновить:
void Main()
{
string[] list = new string[]{"bob", "jack", "tom", "sparrow"};
foreach(string li in list){
try{
if(String.Equals(li, "tom")){
throw new Exception("Fault");
}
Debug.WriteLine(li);
}catch(Exception ex){
Debug.WriteLine(ex.Message);
continue;
}
}
}
С принтами:
bob
jack
Fault
sparrow
Комментарии:
1. Весь этот флаг isError не нужен.
2. @PeterBons: Тогда как я могу перейти к следующему двоичному объекту, если у текущего есть исключение?
3. если вы добавляете try / catch вокруг своих операторов внутри цикла foreach, все в порядке. Итак, следуйте этому ответу без isError, он автоматически пропустит сбойный двоичный объект.
4. @PeterBons: Я сделал это, но в настоящее время мой процесс записывает ошибку в журнал ошибок, и на этом работа заканчивается… Он не переходит к следующему двоичному объекту.
5. Хорошо, где происходит сбой. здесь:
var blobs = container.ListBlobs(prefix: <Root Location of Blobs>, useFlatBlobListing: true);
или внутриforeach (CloudBlockBlob blob in blobs)
?