如何解析此html并将其用作我的ios应用程序中的变量?

时间:2012-11-29 18:29:34

标签: ios

以下是html的示例(实际页面上的标记#s更改): http://nonlinearmind.no-ip.org:8888/token.html

在页面中,我需要查看以下变量的信息:

username = <title>
session = <h1>
token = <h2>

实现这一目标的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

您是否可以控制token.html来源?如果它可以返回JSON或XML而不是HTML,那将是最好的。它极大地简化了解析过程。

但您可以轻松地将页面加载到NSData via:

NSError *error = nil;
NSURL *url = [NSURL URLWithString:@"http://nonlinearmind.no-ip.org:8888/token.html"];
NSData *htmlData = [NSData dataWithContentsOfURL:url options:0 error:&error];
if (error != nil)
{
    NSLog(@"%s unable to load URL '%@'; error = %@", __FUNCTION__, url.absoluteString, error);
}

NSString通过:

NSError *error = nil;
NSURL *url = [NSURL URLWithString:@"http://nonlinearmind.no-ip.org:8888/token.html"];
NSString *htmlString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (error != nil)
{
    NSLog(@"%s unable to load URL '%@'; error = %@", __FUNCTION__, url.absoluteString, error);
}

你可以从那里解析它。

例如,要获取名为<h1>的{​​{1}}的{​​{1}}打开和关闭代码之间的所有文字,您可以:

NSString

我知道你没有说你可以做JSON,但如果可以的话,iOS实现非常容易。所以,假设您有一个返回JSON结果的URL,如:

htmlString

然后你可以用:

解析它
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<h1>(.*?)</h1>"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];
if (error != nil)
{
    NSLog(@"%s regex error: %@", __FUNCTION__, error);
}

NSMutableArray *matches = [NSMutableArray array];

[regex enumerateMatchesInString:htmlString
                        options:0
                          range:NSMakeRange(0, [htmlString length])
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                         // the string including html tags is [htmlString substringWithRange:result.range]
                         NSRange matchRange = [result rangeAtIndex:1];

                         [matches addObject:[htmlString substringWithRange:matchRange]];
                     }];

NSString *first = matches[0];
NSString *second = matches[1];
// etc.

NSLog(@"first=%@", first);
NSLog(@"second=%@", second);

答案 1 :(得分:0)

这是一个很棒的tutorial,用于解析iOS应用中的HTML。

它为您提供了解析非常基本的HTML页面的详细步骤概述,因此它非常适合您的上述示例。

它还向您展示了如何将解析后的Title放入TableView。 我认为理解解析过程更有用,而不仅仅是将代码发布到您的问题中。