0

我正在获取最新的推文并将其显示在我的应用程序中。我把它放在一个 NSMutableString 中,并在我的 xmlparser.m 文件中初始化该字符串,如下所示:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

我可以收到推文,但不知何故它会删掉一些推文并显示其中的一部分。例如推文是

教室里的电子游戏?社交媒体和#technology 可以改变教育http://bit.ly/KfGViF @GOVERNING #edtech

但它显示的是:

#technology 可以改变教育http://bit.ly/KfGViF @GOVERNING #edtech

为什么你认为它是?我尝试以其他方式初始化 currentNodeContent ,但我无法解决问题。

你知道为什么会这样吗?

4

2 回答 2

1

事件驱动 (SAX) 解析器可以自由地在回调中仅返回节点的部分文本。您可能只获得了传入的推文的一部分。您可能应该在可变字符串中累积字符,直到获得指示元素结束的回调。请参阅清单 3 和本指南中的相关文本。

于 2012-04-27T02:29:24.367 回答
0

你这里有两个问题:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

简单地将 anNSString转换为 anNSMutableString是行不通的。您必须自己制作一个可变副本或NSMutableString使用NSString.

此外,文本解析器只给你字符串的最后一部分,因为它可能只是将“ &”解释为实体引用的一部分,或者它可能是实体引用本身。

您可能想要做的是:

  1. 在开始解析之前,先进行初始化currentNodeContent,使其为空NSMutableString

    currentNodeContent = [NSMutableString string];
    
  2. 在解析时,将字符附加currentNodeContent

    [currentNodeContent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    
于 2012-04-27T04:10:40.223 回答