在iPhone应用程序中如何解析HTML页面数据?

3

我不知道如何在iPhone SDK中解析HTML页面内容?

我有一个iPhone应用程序,在这个应用程序中,我需要显示来自HTML页面的图像和数据。我有一个HTML页面URL,需要从该HTML页面URL获取数据。请问有人可以指导我如何解析HTML页面并在iPhone应用程序中显示吗?

你能帮忙吗?

编辑

我有一个像这样的HTML格式的网站http://www.example.com/mobile/403.html。我想为这个网站开发一个本地的iPhone应用程序。我的客户不会以XML方式提供响应,因此我需要使用这个网站并解析HTML内容。该页面包含许多图像、实时数据和表格。到目前为止,我还没有在iPhone SDK中解析HTML页面/内容。所以我需要你的帮助吗?你能帮忙吗?我希望与旧问题相比,这已经很清楚了。谢谢。


直接在WebView中加载该URL。 - Narayana Rao Routhu
@Narayana,我无法在UIWebview中加载它。我需要从HTML页面解析数据并使用iOS方式加载。你能帮我吗? - Gopinath
你是否有一个服务器可以部署Web服务,从而可以将HTML页面抓取到所需的内容,并通过JSON、XML等方式提供这些数据给iPhone? - mccrager
“Load in iOS way”是什么意思?如果你要加载页面,为什么要先解析它?解析和加载不是同一件事。你还说需要获取HTML数据?你想做什么:获取HTML页面的内容数据、解析HTML页面、加载URL或将HTML页面加载到浏览器中。所有这些都是4个不同的事情,不清楚你想做哪一个。让你的问题更加精确和清晰。 - Gruntcakes
@MartinH 我认为这个HTML页面包含实时数据和许多图片。我们的客户希望从该HTML页面中获得iPhone应用程序,因此我们需要解析HTML内容并使用本地iOS工具显示。谢谢您,Martin先生。我现在就去做。谢谢。 - Gopinath
显示剩余5条评论
3个回答

2
您可以按照以下代码将图像 URL 添加到 NSMutableArray 中...
     NSMutableArray *array = [[NSMutableArray alloc] init];
     NSString *response = [[NSString alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"index1" ofType:@"html"] encoding:NSUTF8StringEncoding error:nil];
  //  NSLog(@"response == %@", response);
   NSString *regexStr = @"<a href=\"([^>]*)\">";
  //NSString *regexStr = @"<A HREF=\"([^>]*)\">";
    NSError *error;
    NSInteger i =0;
 // NSInteger length =0;
    while (i<[response length]) {
           NSRegularExpression *testRegex = [NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:&error];
        if( testRegex == nil ) NSLog( @"Error making regex: %@", error );
            NSTextCheckingResult *result = [testRegex firstMatchInString:response options:0 range:NSMakeRange(i, [response length]-i)];
 //   NSLog(@"result == %@",result);
            NSRange range = [result rangeAtIndex:1];
            if (range.location == 0) {
            break;
        }
        NSString * imageUrl = [response substringWithRange:range];
        if ([imageUrl hasSuffix:@".jpg"] || [imageUrl hasSuffix:@".gif"] || [imageUrl hasSuffix:@".tiff"] || [imageUrl hasSuffix:@".JPG"] || [imageUrl hasSuffix:@".JPEG"] || [imageUrl hasSuffix:@".png"] || [imageUrl hasSuffix:@".PNG"] || [imageUrl hasSuffix:@".GIF"] || [imageUrl hasSuffix:@".TIFF"]) {
       // NSLog(@"%@",imageUrl);
       // imageUrl = [imageUrl stringByReplacingOccurrencesOfString:@"/syneye_Portfolio/" withString:@""];
            [array addObject:imageUrl];
            //[array retain];
        }
        i= range.location;
        //NSLog(@"%i",range.location);
        i=i+range.length;
    }

谢谢Shorhashi。我可以在这段代码中使用HTML页面URL吗?比如http://www.example.com/mobile/403.html,我该如何解析这个链接并获取内容?我会尝试你的代码。你能帮我吗?提前感谢你。 - Gopinath
抱歉回复晚了,Gopinath...是的,您也可以在此代码中使用HTML页面URL,例如NSURL * url = [NSURL URLWithString:@"http://www.iana.org/domains/example/"]; NSData * data = [[NSData alloc] initWithContentsOfURL:url]; NSString * response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];然后像我上面指定的代码一样使用响应字符串。 - Shorhashi
谢谢Shorhashi。我会尝试你的代码并告诉你结果。感谢你的帮助。 - Gopinath

0

你应该通过一个网络框架(例如AFNetworking)获取HTML,并使用以下选项之一进行解析:

  1. 自定义代码
  2. 某些HTML解析框架(我不知道有哪些)
  3. 在隐藏的UIWebView中加载HTML,并使用stringByEvaluatingJavaScriptFromString:执行一些Javascript代码

0

我仍然不完全明白你想要什么,但这是关于URL和HTML页面的可能性:

1)页面可以加载到Safari中。当然,如果用户有URL,用户可以这样做。但是,本地应用程序也可以启动Safari并提供要加载的页面的URL。但是,本地应用程序无法启动Safari并提供要加载的实际HTML页面,它必须是URL。

2)本地应用程序可以使用UIWebView来下载和显示给定URL的HTML页面,或者:如果HTML存在于设备上,则将HTML页面提供给UIWebView,然后UIWebView将直接显示它。

3)如果意图只是从HTML中提取一些文本或两个图像,然后显示它,那么可以搜索一些帖子/教程,然后a)在隐藏的UIWebView中加载HTML页面并使用Javascript访问dom元素;b)如果它是xhmlt,则使用xml解析器提取您要查找的HTML标记;c)看看是否有可用于HTML的HTML解析框架;d)直接在HTML中进行字符串搜索以查找HTML令牌。

4) 解析整个HTML并自己显示其所有内容。除非这是一个非常简单的HTML,没有全套功能和不能处理JavaScript等等。你有一个庞大的团队和多年的时间来编写实际上是你自己的浏览器。

编辑: 你仍然一直谈论解析好像解析和显示是同一件事情。

如果你只想在URL中显示http页面,请使用UIWebView。UIWebView会解析它并显示它。你不需要自己解析它。或者从你的应用程序启动Safari(但之后你将无法返回到你的应用程序)。

你说你不能使用UIWebView?为什么不呢?

实际尝试解析和显示HTML页面本身就是疯狂的。


是的,Martin先生。您说得对,但我的客户有一个移动站点,所以他不想在UIWebView中加载页面,而是希望使用iOS开发工具包解析数据并加载它。这就是我要求解析HTML数据的原因。我希望这很清楚。我的英语不太好,对我的糟糕英语表示抱歉。提前致谢。 - Gopinath
很抱歉,我不知道是否存在任何现有的HTML解析器。XHMTL可以使用任何XML解析器进行解析,但我对HTML了解不够,无法确定是否可以轻松地将XML解析器应用于它。这只是为了他们的网页还是可以用于其他页面? - Gruntcakes
谢谢Martin先生。我已经向客户询问过了,但他希望这样做。我不知道该怎么做。感谢您的努力。 - Gopinath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接