2012-01-12 16 views
1

私はrssリーダーを開発していますが、私が得ようとしている要素の内容に( ')のような文字がある場合を除いて、すべて正常に動作します。 私が持っているXMLであれば、私は例えばXMLの構文解析、ios5

...私は何とかエスケープ文字を置き換えたり、変更文字列関数のいくつかの種類を使用する必要がありますね:

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

ありがとう:ジョンの新聞」ではなく "sの新聞" ここ

は私のコードです。

答えて

0

XMLには、特定の文字をエスケープする必要があります。 たとえば、 '>'文字を入れることができなかったり、パーサーを混乱させることになります。

この例はHTMLで表示されています。あなたはXMLで '文字を交換する必要が

&rsquo; 

:あなたが探している エスケープ文字です。

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

出典:私はリストを通過すると記載されている文字のどれを保証しないことをお勧め http://htmlhelp.com/reference/html40/entities/special.html

あなたのXMLに表示されます。

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?