На самом деле все сводится к тому, что вы хотите изящно обрабатывать некорректный XML. Синтаксический анализатор XML правильно сообщает вам, что этот XML недопустим и, следовательно, не может выполнить синтаксический анализ. Предполагая, что у вас нет контроля над этим XML-контентом, я бы предложил предварительно проанализировать его на наличие распространенных ошибок, таких как эта, в результате чего будет обработан обработанный XML-документ, который имеет больше шансов на успех.
Чтобы очистить документ, это может быть так же просто, как выполнить поиск и замену, проблема с выполнением полной замены для любого &
заключается в том, что существуют допустимые варианты использования &
, например &
или ©
. В конце концов, вы в итоге разберетесь с XML, создав что-то вроде этого: andcopy;
Вы можете искать «пробел с амперсандом», но это не приведет к тому, что строка с амперсандом станет последним символом (случай, который может быть легко обработан). Что вы действительно ищете, так это вхождения &
, за которыми не следует ;
, или случаи, в которых встречается какой-либо тип пробела перед следующим ;
, потому что точка с запятой сама по себе подходит.
Если вам нужно больше энергии, потому что вам нужно обнаружить эту и другие ошибки, я бы предложил перейти на NSScanner или RegEx , чтобы найти случаи возникновения этой и других распространенных ошибок. во время вашего этапа дезинфекции. XML-файлы также очень часто бывают довольно большими, поэтому вам следует быть осторожными при работе с ними как строками в памяти, поскольку это может легко привести к сбоям приложения. NSScanner может очень хорошо разбить его на управляемые куски.