2010-02-25 1 views
1

Как я могу удалить символ «&» из строки. Это заставляет мой синтаксический анализатор xml терпеть неудачу.Удалить и символ из строкового объекта c

Я попытался

[currentParsedCharacterData setString: [currentParsedCharacterData stringByReplacingOccurrencesOfString:@"&" withString:@"and"]]; 

Но, кажется, не имеют никакого эффекта

+2

Ничего себе. В правильном XML вы должны заменить их на '&'. – kennytm

+0

Какой класс 'currentParsedCharacterData' экземпляр, точно? Можете ли вы показать больше кода вокруг этой строки? –

+0

спасибо за ответы каждый. Я взял ленивый выход и кивнул серверным & сервером, прежде чем он даже попал в xml – dubbeat

ответ

2

На самом деле это сводится к тому, что вы хотите изящно обрабатывать неверный XML. XML Parser правильно сообщает вам, что этот XML недействителен и, следовательно, не выполняет анализ. Предполагая, что у вас нет контроля над этим XML-контентом, я бы предложил предварительно разобрать его для таких распространенных ошибок, выход из которых был бы дезинфицированным XML-документом, который имеет больше шансов на успех.

Чтобы дезинфицировать документ, он может быть столь же просто, как делать поиск и замену, проблемы с просто делать одеяло заменить на любом &, что есть действительные применения &, например & или ©. Вы закончили бы перетаскивание XML, создав что-то вроде этого: andcopy;

Вы могли бы найти «амперсандовое пространство», но это не будет ловить строку с амперсандом в качестве последнего символа (случай, который может быть легко обрабатывается). То, что вы действительно ищете, - это вхождения &, за которыми не следует ; или те, в которых встречается какой-либо тип пробела перед следующим ;, потому что точка с запятой прекрасна сама по себе.

Если вам нужно больше энергии, потому что вам нужно обнаружить это и другие ошибки, я бы предложил перейти к NSScanner или RegEx, подходящим для поиска случаев возникновения этой и других распространенных ошибок во время шага дезинфекции. Также очень часто для файлов XML достаточно большие вещи, поэтому вам нужно быть осторожными при работе с ними как в цепочках памяти, так как это может привести к сбоям приложений. Разбить его на управляемые куски - это то, что NSScanner может сделать очень хорошо.

1

Для быстрого взгляда попытки stringByReplacingOccurrencesOfString на NSString

NSString* str = @"a & b"; 
[str stringByReplacingOccurrencesOfString:@"&" withString:@"and"]; // better replace by & 

Однако вы также должны иметь дело с другими персонажами, т.е. <>

 Смежные вопросы

  • Нет связанных вопросов^_^