2010-12-22 91 views
0

我的NSXMLParser打破这个字符串:解析器换行符如果字符串包含–

<title>AAA &#8211; BCDEFGQWERTYUIO</title> 

我分析它以这种方式,希望是正确的方式:

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string{ 
[...] 
if ([currentElement isEqualToString:@"title"]) { 
    if (![string isEqualToString:@""]) { 
      [title addObject:string]; 
      NSLog(@"str: %@", string); 
    } 
} 

它返回我:

str:AAA
STR: -
STR:BCDEFGQWERTYUIO

但我想返回一个字符串:

STR:AAA - BCDEFGQWERTYUIO

,因为它是正确的标题。

有什么想法?

谢谢。

回答

1

我发现最好在didEndElement方法中创建对象。这样,你可以继续追加字符串数据到一些临时字符串。所以,你可能做类似如下(注:代码未测试)

在你的对象标题:

NSMutableString *currentElementData; 

...

@property (nonatomic, retain) NSMutableString *currentElementData; 

并在您的解析代码,你将不得不

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string{ 
[...] 
if ([currentElement isEqualToString:@"title"]) { 
    [currentElementData appendString:string]; 
    } 
} 

然后在你的元素后面结束

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName...{ 
    [...] 
    if ([elementName isEqualToString:@"title"]) { 
     [title addObject:currentElementData]; 
     [currentElementData setString:@""]; 
     } 
    } 
+0

好吧,它是正确的。谢啦!啊,在你的snipplet中,修正[currentElementData setString:@“”]; – elp 2010-12-22 12:04:52

+0

更新了您的修补程序。很高兴我能帮上忙。 – Walter 2010-12-22 14:45:02

0

可以使用CDATA部分在XML因为 字符,如“<”和“&”在XML元素是非法的。

“<”将产生错误,因为解析器将其解释为新元素的开始。

“&”将产生错误,因为解析器将其解释为字符实体的开始。