NSScanner循环问题

Pri*_*yat 2 iphone objective-c nsscanner

我有一个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;
}
Run Code Online (Sandbox Code Playgroud)

bbu*_*bum 6

不要使用扫描仪来解析HTML(也不要使用正则表达式......哦,痛苦)*.HTML的重点在于它是一个结构化文档,旨在作为节点或对象树遍历.几乎所有基于DOM [文档对象模型]的行业都是围绕这个构建的.

只需使用XML解析器,因为[结构良好的HTML实际上只是XML]. NSXMLDocument(或 - 如果你需要事件驱动 - NSXMLParser)将工作宏.

或者,如果您必须处理格式错误的HTML(即任意服务器污水),请使用正确的HTML解析器.

这个问题/答案用一个可靠的例子来描述.

*更不用说解析HTML是业界"解决的问题".没有必要推出一个新的.