我有一个 NSScanner
对象,它可以扫描 HTML 文档中的段落标签。扫描仪似乎在找到第一个结果时停止,但我需要数组中的所有结果。
如何改进我的代码以浏览整个文档?
- (NSArray *)getParagraphs:(NSString *) html
{
NSScanner *theScanner;
NSString *text = nil;
theScanner = [NSScanner scannerWithString: html];
NSMutableArray*paragraphs = [[NSMutableArray alloc] init];
// find start of tag
[theScanner scanUpToString: @"<p>" intoString: NULL];
if ([theScanner isAtEnd] == NO) {
NSInteger newLoc = [theScanner scanLocation] + 10;
[theScanner setScanLocation: newLoc];
// find end of tag
[theScanner scanUpToString: @"</p>" intoString: &text];
[paragraphs addObject:text];
}
return text;
}
最佳答案
不要使用扫描仪来解析 HTML(也不要使用正则表达式......哦,痛苦)*。 HTML 的全部要点在于它是一个结构化文档,旨在作为节点或对象树进行遍历。几乎整个基于 DOM [文档对象模型] 的行业都是围绕这一点构建的。
只需使用 XML 解析器,因为[无论如何,结构良好的 HTML 实际上只是 XML]。 NSXMLDocument (或者 - 如果您需要事件驱动 - NSXMLParser )将会很好地工作。
或者,如果您必须处理格式错误的 HTML(即任意服务器污水),请使用适当的 HTML 解析器。
这个question/answer describes exactly that ,有一个可靠的例子。
*更不用说解析 HTML 是业界“已解决的问题”。无需推出新的。
关于iphone - NSScanner 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6323677/