iphone - NSScanner 循环问题

标签 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;
}

最佳答案

不要使用扫描仪来解析 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/

相关文章:

iphone - iPad 中的推送通知未出现在“设置”中

objective-c - NSScanner 无法识别 scanUpToString 上的选择器

iPhone SDK :NSScanner crashing randomly

ios - TableView 不显示 Cells Swift

ios - 当用户点击通知 IOS7 时导航到特定 View Controller

Objective-C 说明; -/+ 和 *var

objective-c - 已完成启动覆盖?

iphone - 如何使用NSScanner解析.ics文件

ios - UISearchBar:更改输入字段的背景颜色

objective-c - 在 objective-c 中,类可以实质上删除自身吗?