浅谈iOS解析HTMl标签以及开发中的一些坑

2020-01-21 03:03:52刘景俊

我们首先获取到本地的about.html的文件,然后转化为data,加UTF8编码转换为我们可以看到的容如下图:

 

 
ios,解析html标签内容,解析html标签

 

上部分为HTML文件的原标签,下部分为我们去到的标签为“title”的内容。 这样我们就得到了我们想要的

使用方法2:有自己属性的标签内容取值

上面的那个HTML文件由于内容的局限性不方便我们举例,我们使用的HTML标签源码如下:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello</title>
</head>
<body>hello world
<span>
</span>
无序列表
<ul type="disc">
  <li>苹果</li>
  <li>水果</li>
  <li>桃子</li>
</ul>
<ul type="circle">
  <li>苹果2</li>
  <li>水果2</li>
  <li>桃子2</li>
</ul>
</body>
</html>

我们想去取到的是无序列表 节点属性为type 属性值为disc的标签内容,显然上面的方法已经不能满足我们的需要,老规矩先上代码:


//测试2:获取更加详细的内容
  NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
  NSString *filePath =[resourcePath stringByAppendingPathComponent:@"first.html"];
  NSData *data =[[NSData alloc]initWithContentsOfFile:filePath];
  
  NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];  //data转字符串 为了打印不是乱码
  NSLog(@"------%@",result);
  
  TFHpple *Hpple = [[TFHpple alloc]initWithHTMLData:data];
  NSArray *array =[Hpple searchWithXPathQuery:@"//ul"];
  
  for (TFHppleElement *HppleElement in array) {
    
    if ([HppleElement.attributes[@"type"]isEqualToString:@"disc"]) { //找出 ul标签下 节点属性type  属性值为 disc 的数组
      
      NSArray *array2 = [HppleElement searchWithXPathQuery:@"//li"];
      
      for (TFHppleElement *HppleElement2 in array2) {
        
        NSLog(@"测试2的目的标签内容:-- %@",HppleElement2.text);
      }
    }
  }

使用方法重点在下面的这个if语句的判断里


 if ([HppleElement.attributes[@"type"]isEqualToString:@"disc"]) {
}

如果存在这种条件下的内容,根据这个BOOL值,去取到下面标签为“li‘的内容 运行结果如下:

 

 
ios,解析html标签内容,解析html标签