使用TFHpple库解析HTML和XML

来源:互联网 发布:ikbc c87换mac键位 编辑:程序博客网 时间:2024/06/06 00:59

使用Objective-C解析HTML或者XML,系统自带有两种方式一个是通过libxml,一个是通过NSXMLParser。 libxml性能较好,且可以结合urlconnection实现边下载边解析,在要求快速 、分批响应UI到情况下较为有用,NSXMLParser基本没什么优势,不如使用第三方工具。

TFHpple,它是一个轻量级的包装框架,可以很好的解决这个问题,尤其是它支持HTML的解析,是其他XML类库所不及的地方,它是用XPath来定位和解析HTML或者XML

使用步骤:

1.加入 libxml2 library 到你的项目

到Target中,选择Build Phases页
在Link Binary With Libraries中
从列表中选择libxml2.dylib

2.https://github.com/topfunky/hpple 下载ZIP包

-将下面hpple的源代码加入到你的项目中:
HTFpple.h
HTFpple.m
HTFppleElement.h
HTFppleElement.m
XPathQuery.h
XPathQuery.m

3. xpath 权威教程 http://www.w3school.com.cn/xpath/index.asp

4.例子:

 

NSData *siteData = [NSData dataWithContentsOfURL:url];

  TFHpple *xpathParser = [[TFHpple allocinitWithHTMLData:siteData];

  self.listArray = [xpathParser searchWithXPathQuery:@"//ul[@class='v']/li[@class][position()=2]/img"];

  

  NSArray *pageTotal = [xpathParsersearchWithXPathQuery:@"//ul[@class='pages']/li[@class='last']/a"];

  if (pageTotal.count > 0) {

    TFHppleElement *element = [pageTotal objectAtIndex:0];

    TFHppleElement *element1 = [element children][1];

    NSString *pageString = element1.content;

    self.pageTotal = [pageString intValue];

  }else {

    self.pageTotal = 1;

  }

  

  NSArray *name = [xpathParsersearchWithXPathQuery:@"//ul[@class='info']/li[@class='avatar']/a/img"];

  TFHppleElement *element = name[0];

  NSDictionary *dic = [element attributes];

  self.name = dic[@"title"];

  self.imageUrl = [NSURL URLWithString:dic[@"src"]];

  

  NSArray *detail = [xpathParsersearchWithXPathQuery:@"//div[@class='summary']/div[@_fr='more']"];

  TFHppleElement *elementDetail = [detail[0firstChild];

  self.details = elementDetail.content;

0 0
原创粉丝点击