如果字符串包含分析符换行符 -

时间:2010-12-22 10:35:00

标签: objective-c xml special-characters nsxmlparser feedparser

我的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

因为它是正确的标题。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分: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:@""];
        }
    }

答案 1 :(得分:0)

您可以在xml中使用CDATA部分,因为  像“&lt;”这样的字符和“&amp;”在XML元素中是非法的。

“&LT;”将生成错误,因为解析器将其解释为新元素的开头。

“&安培;”将生成错误,因为解析器将其解释为字符实体的开头。