亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

淺談iOS解析HTMl標簽以及開發中的一些坑

2019-10-21 18:43:02
字體:
來源:轉載
供稿:網友

開篇

看了看更新日期好久沒寫簡書了,經常還有小伙伴在文章下面評論,看到自己寫的東西還是有點用的,鼓勵自己接著堅持下去吧,哈哈。今天主要就寫寫iOS中怎么解析HTML標簽,我們常用的后臺返回數據一般是json格式的但是有些時候如果我們收到的是帶HTMl標簽的我們該怎么處理他呢,今天就來說一說吧。

正文

前兩天獲取后臺數據的時候,得到這么一條返回信息

"恭喜您獲得<font color='red'>8.1元</font>現金獎勵 "

本來簡簡單單的把返回數據展示到label上的事情一下子變得有趣起來,后臺說是為了以后產品改返回內容的時候容易處理,可以這理由很強勢。

 

 
ios,解析html標簽內容,解析html標簽

 

但是作為開發的我們怎么處理呢,首先我們看下安卓的處理方法,安卓對處理這個還是比較粗暴的人家有系統方法,如下:

 

 
ios,解析html標簽內容,解析html標簽

 

那么iOS端怎么處理呢,我們可以用webview,也可以用Label的attributedString屬性,也可以直接簡單粗暴的分割字符串,然后去除HTML標簽,然后處理,聽聽就讓人惆悵,然而畢竟是一種方法,能解決問題的方法都是好方法,我們就放一下最粗暴方法的主要代碼(其余方法在評論補充有,哈哈),去除HTML標簽的方法如下:

//過濾后臺返回字符串中的標簽- (NSString *)flattenHTML:(NSString *)html {    NSScanner *theScanner;  NSString *text = nil;    theScanner = [NSScanner scannerWithString:html];    while ([theScanner isAtEnd] == NO) {    // find start of tag    [theScanner scanUpToString:@"<" intoString:NULL] ;    // find end of tag    [theScanner scanUpToString:@">" intoString:&text] ;    // replace the found tag with a space    //(you can filter multi-spaces out later if you wish)    html = [html stringByReplacingOccurrencesOfString:        [NSString stringWithFormat:@"%@>", text]                        withString:@""];  }  MidStrTitle = html;  return html;}

這樣我們就處理掉了HTML標簽,那么問題來了,如果我們要處理的是很多的HTML標簽呢,我們該怎么處理呢,這就是這篇文章的目的。

TFHpple庫

如果我們想要得到是如下一個HTML源碼中某一個標簽的內容呢,部分源碼如下,這里只是放了標簽部分的內容

<title>關于APP的聲明</title></head><body><h3>關于APP的聲明</h3><p>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</p><p>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</p><h3>聯系我們</h3><p>若您在使用該APP有遇到任何問題或有新想法,都可以聯系我們. 如下是我們的聯系方式:</p><ul><li>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</li><li>E-mail: xxxxxxxxxxxxxxxxxxxxxxxxxx</li><li>phone: xxxxxxxxxxxxxxxxxx</li></ul><h3>感謝</h3><p>首先,感謝廣大用戶對公司的支持和鼓勵,謝謝你們對我們的一路支持.</p><p>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</p><h3>版權聲明</h3><p>只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試只是測試</p></body></html>

這里如果我要針對性取某一個標簽的內容就要用到我們今天介紹的庫了。

環境的配置

導入靜態庫

 

 
ios,解析html標簽內容,解析html標簽

 

然后把導入的靜態庫添加到文件的路徑

 

 
ios,解析html標簽內容,解析html標簽

 

然后導入TFHpple庫就可以了。

使用方法1,簡單的標簽形式取值法

直接上代碼

NSString *resourcePath = [[NSBundle mainBundle] resourcePath];    NSString *filePath =[resourcePath stringByAppendingPathComponent:@"about.html"];    NSData *data =[[NSData alloc]initWithContentsOfFile:filePath];    NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];  //data轉字符串 為了打印不是亂碼    NSLog(@"------%@",result);      TFHpple *Hpple = [[TFHpple alloc]initWithHTMLData:data];      //測試1:獲取簡單的標題    NSArray *array =[Hpple searchWithXPathQuery:@"//title"]; //獲取到為title的標題      for (TFHppleElement *HppleElement in array) {        NSLog(@"測試1的目的標簽內容:-- %@",HppleElement.text);          }

我們首先獲取到本地的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標簽

 

項目中遇到的一些坑

我們取完了標簽并不能結束,好不容易有時間就再寫一下一些遇到的小的問題吧。

自定義鍵盤

自定義鍵盤也算是老問題了,由于情況的不同,我們可能需要定義一個完全自定義的鍵盤,來適應各種奇葩的需求。最近看代碼的時候才發現不同的人寫法真不一樣,這里介紹一個個人認為比較簡單的方法吧。

UITextField的inputView的屬性,用法舉例如下:

kkeyboardView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320 ,260 )] ;  kkeyboardView.backgroundColor = [UIColor lightGrayColor];  [self setUpMyKeyBoard2];  self.textfiled.inputView = kkeyboardView;

創建一個View 然后把它作為UITextField的inputView,這個時候就可以完全的自定義自己想要的自定義鍵盤了,產品你過來說說你還要鍵盤上有啥。

 

 
ios,解析html標簽內容,解析html標簽

 

UIScrollView的滾動問題

前天同事說了一個奇怪的問題,說懶加載也寫了,布局也搞了,偏移量也設置了,在別的頁面都搞好了,這個頁面的滾動試圖忽然就不動了。老司機也翻車了喜聞樂見,但是問題怎么處理呢。

-(void)viewDidLayoutSubviews{  _BaseScore.contentSize = CGSizeMake(SCREEN_WIDTH, 568.0 - 44); }

一陣折騰之后給了他這個方法,把偏移量寫在這個方法里就可以滾動了,同事不禁說老了老了,發現自己記憶越來越差了,哈哈,有一群這樣的同事真的工作比較開心。

后記

今天的主要介紹就這么多吧,希望對需要的小伙伴有所幫助,有時間的話下次寫一下,項目中用到的,商家端生成二維碼收款,用戶端掃描二維碼付款,以及定時刷新,狀態判斷,掃描二維碼生成邀請碼等一系列二維碼相關的功能。有寫的不對地方的歡迎指出,大神輕噴,哈哈。

補充: 再補充兩條簡單情況下的方法:

Label的attributedString屬性

NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[h5str dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];[selflab setAttributedText:attrStr];

利用web view

_webView = [[UIWebView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];NSString *html_str = [NSString stringWithFormat:@"<div style='color:red'>666666</div> 測試 %@",@"新風作浪",@"2020-01-00"];[self.webView loadHTMLString:html_str baseURL:nil];[self.view addSubview:self.webView];

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久免费精品国产| 亚洲人成电影在线播放| 欧美国产在线视频| 美女少妇精品视频| 欧美日韩国产在线| 欧美性高潮床叫视频| 91精品国产电影| 日本精品久久久久久久| 国产精品视频精品| 国模吧一区二区三区| 久久久亚洲国产| 欧美在线免费观看| 69精品小视频| 成人激情在线播放| 国产精品久久久久久久美男| 日韩av不卡在线| 国产男女猛烈无遮挡91| 久热精品在线视频| 欧美在线视频一区二区| 久久天天躁狠狠躁夜夜爽蜜月| 中文字幕国产亚洲2019| 欧美成人激情图片网| 国产欧美日韩专区发布| 最近2019年中文视频免费在线观看| 26uuu另类亚洲欧美日本一| 亚洲黄色片网站| 菠萝蜜影院一区二区免费| 91成人在线播放| 精品久久久久久中文字幕大豆网| 国产精品午夜国产小视频| 久操成人在线视频| 韩国三级电影久久久久久| 国产欧美日韩精品在线观看| 日韩中文字幕在线免费观看| 在线看片第一页欧美| 久久综合伊人77777尤物| 国产一区二区在线播放| 日韩电影免费观看中文字幕| 国产精品久久久久久五月尺| 亚洲激情 国产| 欧美性jizz18性欧美| 在线性视频日韩欧美| 亚洲国产精品久久久久秋霞蜜臀| 欧美亚州一区二区三区| 国产91精品久久久| 国产大片精品免费永久看nba| 国产精品av在线| 黄色精品在线看| 97久久精品人搡人人玩| 久久伊人色综合| 欧美日韩国产色视频| 亚洲福利视频二区| 久久黄色av网站| 久久久久国产一区二区三区| 亚洲电影第1页| 欧美又大粗又爽又黄大片视频| 欧美精品一本久久男人的天堂| 成人性生交大片免费看小说| 成人免费视频a| 亚洲精品欧美极品| 大伊人狠狠躁夜夜躁av一区| 国产精品大片wwwwww| www.日韩不卡电影av| 亚洲精品mp4| 欧美激情一区二区三区成人| 亚洲桃花岛网站| 久久久久久久999| 久久九九有精品国产23| 欧美日韩另类在线| 亚洲自拍偷拍色图| 精品日本美女福利在线观看| 亚洲综合在线中文字幕| 欧美精品精品精品精品免费| 亚洲第一精品夜夜躁人人躁| 欧美激情视频在线观看| 国产精品狼人色视频一区| 中文字幕日韩精品在线观看| 亚洲女同精品视频| 色99之美女主播在线视频| 成人免费直播live| 美女久久久久久久久久久| 最近2019中文字幕大全第二页| 国产精品中文字幕在线| 色先锋资源久久综合5566| 国产午夜精品理论片a级探花| 久久91精品国产91久久久| 亚洲天堂av综合网| 中文字幕日韩欧美精品在线观看| 午夜精品久久久久久99热| 欧美成人精品不卡视频在线观看| 国产日韩欧美成人| 亚洲视频欧美视频| 91亚洲国产成人精品性色| 欧美午夜视频一区二区| 国产精品www| 成人信息集中地欧美| 久久久亚洲影院你懂的| 一区二区三区在线播放欧美| 国产精品视频一区二区高潮| 久久久精品国产一区二区| 人妖精品videosex性欧美| 亚洲色图25p| 欧美成人精品在线视频| 日韩电影免费观看中文字幕| 97精品视频在线观看| 狠狠干狠狠久久| 国产视频丨精品|在线观看| 日韩精品免费视频| 亚洲欧美一区二区三区久久| 国产日韩视频在线观看| 国产亚洲精品91在线| 国产欧美精品在线播放| 久久精品一偷一偷国产| 日韩中文字幕精品| 日韩精品视频免费在线观看| 最近中文字幕mv在线一区二区三区四区| 国产日本欧美一区二区三区| 国产精品亚洲аv天堂网| 亚洲欧美中文在线视频| www国产亚洲精品久久网站| 中文字幕亚洲一区| 亚洲视频在线观看| 日韩在线欧美在线国产在线| 国产精品成人va在线观看| 亚洲欧美国产精品专区久久| 理论片在线不卡免费观看| 亚洲精品免费在线视频| 成人精品久久久| 97久久精品人人澡人人爽缅北| 国产日韩欧美在线播放| 国产精品高清网站| 亚洲xxxx妇黄裸体| 亚洲成成品网站| 亚洲久久久久久久久久久| 亚洲自拍偷拍色图| 1769国产精品| 国产精品亚洲视频在线观看| 亚洲白拍色综合图区| 精品久久中文字幕| 国产一区视频在线播放| 国产成人啪精品视频免费网| 日韩69视频在线观看| 亚洲精品国精品久久99热| 在线观看视频亚洲| 亚洲精品久久久久久久久| 在线视频免费一区二区| 久久99久久久久久久噜噜| 亚洲国产精品视频在线观看| 亚洲韩国日本中文字幕| 红桃av永久久久| 中文字幕精品视频| 国产精品女视频| 色www亚洲国产张柏芝| 亚洲精品国偷自产在线99热| 亚洲最大中文字幕| 欧美日韩黄色大片| 亚洲一区二区免费| 91久久综合亚洲鲁鲁五月天| 中文字幕av一区中文字幕天堂| 亚洲福利在线播放| 九九热视频这里只有精品| 992tv在线成人免费观看| 国产亚洲欧美日韩精品| 91精品在线一区|