解析XML,内容中的单引号字符,ios5

时间:2012-01-12 18:39:02

标签: ios5 nsxmlparser

我正在开发一个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;
}

提前完成。

2 个答案:

答案 0 :(得分:0)

XML要求转义某些字符。 例如,你不能放一个'&gt;'字符在或它会混淆解析器。

您可以在HTML中看到此示例。 您正在寻找的逃脱角色是:

&rsquo;  

您需要替换XML中的字符。

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

来源: http://htmlhelp.com/reference/html40/entities/special.html

我建议浏览列表并确保XML中没有列出任何字符。

答案 1 :(得分:0)

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];

修改:查看此问题How to parse strings containing ampersands with NSXMLParser?

中的答案