C# XPathDocument(путь) оценивает весь путь перед возвратом документа?

Мой английский не самый лучший, но я думаю, что это сработает. Также я абсолютный новичок в C#.

Приведен следующий фрагмент кода: он должен открыть XML-документ, из которого я ЗНАЮ, что один из узлов может быть неправильно интерпретирован, кстати, это действительно неправильно.


try          
{
    XPathDocument expressionLib = new XPathDocument(path);
    XPathNavigator xnav = expressionLib.CreateNavigator();
}

...и так далее


я намерен создать XPathDocument и XPathNavigator, а затем следить за ошибками.

но мой код завершается ошибкой с "XPathDocument expressionLib = new XPathDocument(path);" (ну, это вызывает исключение, которое я улавливаю), поэтому я предполагаю, что "XPathDocument(path);" проверяет весь XML-документ перед его возвратом.

На страницах Microsoft я не нашел никаких подсказок для такого предполагаемого поведения - вы можете это проверить?

И какой может быть обходной путь?

Да, я хочу открыть этот XML с этой ошибкой внутри (не на самом верхнем узле) и реагировать только на этот недопустимый узел и работать с остальной частью файла.

Наслаждайся выходными Алекс.

2 ответа

Решение

Обходного пути нет. Если документ не является допустимым документом XML или в документе есть недопустимые символы или разделы, вы получите исключение.

Единственный способ продолжить - это обработать исключение XmlException и попытаться манипулировать данными Xml, чтобы сделать их действительными, что может варьироваться от простого, если требуется просто экранировать некоторые недопустимые символы, до сложного, если вам необходимо выполнить некоторое расширенное форматирование или если вы получаете документы, содержащие много разных типов ошибок.

Возможно, лучшим способом действий является написание класса валидатора / восстановления XML, через который вы бы поместили свой XML-документ, прежде чем пытаться загрузить его с классом XPathDocument, хотя я почти уверен, что должна быть какая-то библиотека, которая могла бы это сделать. все тяжелые работы для вас...

И все остальные

Спасибо за ответы и подсказки. Счастливой Пасхи Алекс.

Другие вопросы по тегам