На самом деле это сводится к тому, что вы хотите изящно обрабатывать неверный XML. XML Parser правильно сообщает вам, что этот XML недействителен и, следовательно, не выполняет анализ. Предполагая, что у вас нет контроля над этим XML-контентом, я бы предложил предварительно разобрать его для таких распространенных ошибок, выход из которых был бы дезинфицированным XML-документом, который имеет больше шансов на успех.
Чтобы дезинфицировать документ, он может быть столь же просто, как делать поиск и замену, проблемы с просто делать одеяло заменить на любом &
, что есть действительные применения &
, например &
или ©
. Вы закончили бы перетаскивание XML, создав что-то вроде этого: andcopy;
Вы могли бы найти «амперсандовое пространство», но это не будет ловить строку с амперсандом в качестве последнего символа (случай, который может быть легко обрабатывается). То, что вы действительно ищете, - это вхождения &
, за которыми не следует ;
или те, в которых встречается какой-либо тип пробела перед следующим ;
, потому что точка с запятой прекрасна сама по себе.
Если вам нужно больше энергии, потому что вам нужно обнаружить это и другие ошибки, я бы предложил перейти к NSScanner или RegEx, подходящим для поиска случаев возникновения этой и других распространенных ошибок во время шага дезинфекции. Также очень часто для файлов XML достаточно большие вещи, поэтому вам нужно быть осторожными при работе с ними как в цепочках памяти, так как это может привести к сбоям приложений. Разбить его на управляемые куски - это то, что NSScanner может сделать очень хорошо.
Ничего себе. В правильном XML вы должны заменить их на '&'. – kennytm
Какой класс 'currentParsedCharacterData' экземпляр, точно? Можете ли вы показать больше кода вокруг этой строки? –
спасибо за ответы каждый. Я взял ленивый выход и кивнул серверным & сервером, прежде чем он даже попал в xml – dubbeat