iPhone удалить ‹! [CDATA

Я читаю xml, и, наконец, мне просто нужно удалить информацию о CDATA из моих результатов

Например: я получаю:

 "<![CDATA[iPhone 4-Rückgaberecht: Deutsche Telekom kulant]]>"

просто нужен «iPhone 4-Rückgaberecht: Deutsche Telekom kulant»

спасибо Крис

Измените свои ответы: я не использую NSXMLParser (по этой причине я делаю свой собственный синтаксический анализатор)

Нашел несколько предложений с:

- (NSString *)stringByDecodingXMLEntities;
but dont know how to implement. I always get
> YourController may not respond to '-stringByDecodingXMLEntities" <

person christian Muller    schedule 29.07.2010    source источник
comment
Я ничего не знаю об iPhone, но синтаксический анализатор XML должен удалить разделы CDATA за вас. Позор ему / ей / ей, если он / она / это не сделает.   -  person MvanGeest    schedule 29.07.2010
comment
Я серьезно рекомендую использовать NSXMLParser. XML намного сложнее, чем думает большинство людей. Свертывание собственного парсера - это рецепт ошибок и несовместимости.   -  person bobince    schedule 29.07.2010


Ответы (4)


Хорошо, я решил это с помощью этого:

 NSMutableString* resultString;


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)s {
   resultString = [[NSMutableString alloc] init];
    [resultString appendString:s];
}

- (NSString*)convertEntiesInString:(NSString*)s {
    if(s == nil) {
    NSLog(@"ERROR : Parameter string is nil");
    }
    NSString* xmlStr = [NSString stringWithFormat:@"<d>%@</d>", s];
    NSData *data = [xmlStr dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
    NSXMLParser* xmlParse = [[NSXMLParser alloc] initWithData:data];
    [xmlParse setDelegate:self];
    [xmlParse parse];
    NSString* returnStr = [[NSString alloc] initWithFormat:@"%@",resultString];
  return returnStr;
}

вызов: myConvertedString = [self convertEntiesInString: myOriginalString];

person christian Muller    schedule 29.07.2010

использовать

  • (void) parser: (NSXMLParser *) parser foundCDATA: (NSData *) CDATABlock

метод вместо

  • (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string

Это оно

person Ganesh    schedule 29.07.2010

вы можете попробовать регулярное выражение

заменить <!\[CDATA\[(.*)\]\]> на $1

person opatut    schedule 29.07.2010
comment
дайте мне знать, как это сделать в objc-C :) - person christian Muller; 29.07.2010
comment
простите, ничего не знаю о obj-c. Похоже, Google тоже ничего не находит. stackoverflow.com/ questions / 422138 / посмотрите принятый ответ ... - person opatut; 29.07.2010

Если у вас уже есть строка в формате String, вы можете удалить ее следующим образом:

//Declare what you wish to remove
NSString * suffixTorRemove = @"<![CDATA[";
NSString * prefixToRemove = @"]]>";

//Now create a new string which uses your existing string and removes the declared occurrences above
NSString * newString = [yourString stringByReplacingOccurrencesOfString:suffixTorRemove withString:@""];
//Now the first part has changed, time to remove the second part
NSString * newString2 = [newString stringByReplacingOccurrencesOfString:prefixTorRemove withString:@""];

Быстро и просто :-)

person App Dev Guy    schedule 09.04.2015