Mam następujący kod w jednym z naszych projektów stron:Nie można obsłużyć XMLException?
XmlDocument xDoc = new XmlDocument();
xDoc.Load(File.FullName);
//work through each print batch in this queue file
try
{
XmlNodeList nodeList = xDoc.SelectNodes("Reports/PrintBatch");
foreach (XmlNode printBatch in nodeList)//xDoc.SelectNodes("Reports/PrintBatch"))
{
PrintBatch batch = new PrintBatch();
batch.LoadBatch(printBatch, File.Extension);
this.AddBatch(batch);
}
}
catch (XmlException e)
{
//this report had an error loading!
Console.WriteLine(e.Message);
}
Zasadniczo zajmuje plik wsadowy xml i ładuje go jako obiekt, gotowy do przetworzenia.
Działa to dobrze, do niedawna, gdy znaleziono jeden z plików XML zawierający znak null (który jest nieprawidłowy w XML).
Gdy próbuje przetworzyć ten „dudd” plik, otrzymujemy następujący wyjątek:
alt text http://blog.ianmellor.co.uk/images/xml_err.jpg
Ok tak daleko .. ale gdy następnie spróbuj „dalej” lub „krok nad” Spodziewam się, że wpłynie do bloku catch. Jednak tak się nie dzieje; po prostu dostać czerwoną ekran śmierci:
alt text http://blog.ianmellor.co.uk/images/xml_err2.jpg
Co robię źle?
Próbowałem uchwycić wyjątek SystemException, Exception, System.Xml.XmlPath.XPathException z podobnym sukcesem. – Sk93
z ciekawości, co się dzieje, gdy zmienia się catch (XmlException e) {}, aby złapać {}? – Razzie
Razzie: Dokładnie to samo. Wyrzuca czerwony ekran o śmierci. – Sk93