Что делать, если Xml-файл с ошибкой?

199
06 февраля 2018, 06:26

При обработке xml-файлов с помощью XmlReader наткнулся на проблему: xml-файл, который я обрабатывал (обход файла производил с помощью XmlReader.Read()), оказался с ошибкой (два тега наложилось друг на друга и вылетает ошибка, что такой-то символ не может стоять вначале имени). Вариантов исправить xml-файл нет, так как он очень большого объёма. После вылета ошибки обработка заканчивается, а мне бы как-нибудь продолжить её дальше...

Пробовал отловить try-catch и самовольно сделать XmlReader.Read() или XmlReader.Skip(), но обработка всё равно не продолжается. Удивлюсь, если нет решения этой проблемы и придется обрабатывать xml-ки как текстовый файл со своим блэкджеком и...

//var xMreader = XmlReader.Create(nameXmlFile); //так было до подсказки
var settings = new XmlReaderSettings {CheckCharacters = false};
var xMreader = XmlReader.Create(nameXmlFile, settings);            
while (true)
{
    try
    {
        while (xMreader.Read())
        {
            if (xMreader.NodeType != XmlNodeType.Element) continue;
            //обработка
        }
        break;
    }
    catch (Exception exp)
    {
        //неудачная попытка "перепрыгнуть" через ошибочный участок xml
        //запись ошибки в лог                   
    }
}

Пример ошибочного xml(ошибка в node c id=2, где второй раз {31Z"2013..}):

<test>
<node id="1" version="1" timestamp="2013-03-25T13:56:31Z" changeset="15491865" uid="322785" user="BCNorwich"/>
<node id="2" version="1" timestamp="2013-03-25T13:56:31Z"2013-03-25T13:56:31Z"changeset="15491865" uid="322785" user="BCNorwich"/>
<node id="3" version="1" timestamp="2013-03-25T13:56:31Z" changeset="15491865" uid="322785" user="BCNorwich"/>
<node id="4" version="1" timestamp="2013-03-25T13:56:31Z" changeset="15491865" uid="322785" user="BCNorwich"/>
<node id="5" version="1" timestamp="2013-03-25T13:56:31Z" changeset="15491865" uid="322785" user="BCNorwich"/>
<node id="6" version="1" timestamp="2013-03-25T13:56:31Z" changeset="15491865" uid="322785" user="BCNorwich"/>
</test>
READ ALSO
Конвертация DateTime со стринга

Конвертация DateTime со стринга

Конвертирую "05-Feb-18 5:44:00 AM"

162
как при наведении курсора на кнопку сделать появления справки Windows forms

как при наведении курсора на кнопку сделать появления справки Windows forms

Будет кнопка, и если удержать на этой кнопке мышку секунду где-то 05 будет появляться окно с текстом

191
Hide banner Admob - Unity

Hide banner Admob - Unity

Проблема такова: банер запускается, но не работает Hide(); и Destroy(); у AdmobаСкрипт:

139