Парсинг на XML, символ с единични кавички в съдържанието, ios5

Разработвам rss четец и всичко работи добре, освен когато има символ като (') в съдържанието на елемента, който получавам. Предполагам, че трябва да използвам някаква функция за низ, която замества или променя по някакъв начин екраниращите знаци...

например, ако в 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