Разбор XML, символ одинарной кавычки в содержимом, ios5

Я разрабатываю программу для чтения RSS, и все работает нормально, за исключением случаев, когда в содержимом элемента, который я получаю, есть такой символ, как ('). Я думаю, мне следует использовать какую-то строковую функцию, которая заменяет или каким-то образом изменяет escape-символы...

например, если в xml у меня есть:

<desciption>this is John's newspaper</description>

Я получаю не "это газета Джона", а "газета его"

вот мой код:

-(id) loadXMLByURL:(NSString *)urlString
{
    rssFeeds            = [[NSMutableArray alloc] init];
    NSURL *url          = [NSURL URLWithString:urlString];
    NSData  *data       = [[NSData alloc] initWithContentsOfURL:url];
    xmlParser           = [[NSXMLParser alloc] initWithData:data];
    [xmlParser setDelegate:self];
    [xmlParser parse];
    return self;
}


- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([elementname isEqualToString:@"item"])
    {
        currentFeed = [rssReader alloc];
    }
}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementname isEqualToString:@"title"])
    {
        currentFeed.rssTitle = str1;
    }
    if ([elementname isEqualToString:@"description"])
    {
        currentFeed.rssDescription = currentNodeContent;
    }
    if ([elementname isEqualToString:@"pubDate"])
    {
        currentFeed.rsspubDate = currentNodeContent;
    }
    if ([elementname isEqualToString:@"item"])
    {
        [rssFeeds addObject:currentFeed];
        currentFeed = nil;
        currentNodeContent = nil;
    }
}

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[xmlParser rssFeeds] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    INrssCell *cell = (INrssCell *)[tableView dequeueReusableCellWithIdentifier:@"ingrCell"];
    rssReader *currectFeed = [xmlParser.rssFeeds objectAtIndex:indexPath.row];
    cell.titleLbl.text = currectFeed.rssTitle;
    cell.dateLbl.text = currectFeed.rsspubDate;
    cell.descLbl.text = currectFeed.rssDescription;
    return cell;
}

Спасибо заранее.


person mixahlos    schedule 12.01.2012    source источник


Ответы (2)


XML требует экранирования определенных символов. Например, вы не могли вставить символ '>', иначе это запутало бы синтаксический анализатор.

Вы видите примеры этого в HTML. Экранированный символ, который вы ищете:

&rsquo;  

Вам нужно заменить символы ' в вашем XML.

<description>this is John&rsquo;s newspaper</description>

Источник: http://htmlhelp.com/reference/html40/entities/special.html

Я предлагаю просмотреть список и убедиться, что ни один из перечисленных символов не появляется в вашем XML.

person Adam Griffiths    schedule 09.03.2012

NSString* contents = [NSString stringWithContentsOfURL:url 
                                              encoding:NSUTF8StringEncoding 
                                                 error:nil];

// You can pre-process(replace certain characters, ...) content of xml in here.

NSData* data = [contents dataUsingEncoding:NSUTF8StringEncoding];

Изменить: ознакомьтесь с ответом на этот вопрос Как анализировать строки, содержащие амперсанды, с помощью NSXMLParser?

person Hamdi    schedule 01.06.2012