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

因为它是正确的标题。

任何的想法?

谢谢。

4

2 回答 2

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:@""];
        }
    }
于 2010-12-22T11:33:02.157 回答
0

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

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

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

于 2010-12-22T11:44:46.883 回答