Удалить символ & из строковой цели c - PullRequest
1 голос
/ 25 февраля 2010

Как бы я удалил символ "&" из строки. Это приводит к сбою моего xml-анализатора.

Я пытался

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

Но, похоже, не имеет никакого эффекта

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

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

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

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

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

1 голос
/ 25 февраля 2010

Для быстрой попытки взгляните на stringByReplacingOccurferencesOfString на NSString

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

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

...