簡(jiǎn)述
1嚎幸、XML它是可擴(kuò)展標(biāo)記語(yǔ)言,跟JSON一樣樱蛤,也是常用的一種用于交互的數(shù)據(jù)格式,至于如何展示、有某些規(guī)則徐裸,我這里就不寫入了,這里的話主要講解如何解析XML
2、XML的方式有2種
1犯助、DOM:一次性將整個(gè)XML文檔加載進(jìn)內(nèi)存,比較適合解析小文件
2维咸、SAX:從根元素開始剂买,按順序一個(gè)元素一個(gè)元素往下解析,比較適合解析大文件
3癌蓖、解析XML的方式(有很多瞬哼,這里介紹兩種,一個(gè)解析SAX租副,一種解析DOM)
1坐慰、NSXMLParser:SAX方式解析,使用簡(jiǎn)單(蘋果原生)
2用僧、GDataXML:DOM方式解析结胀,(Google開發(fā))
服務(wù)端返回的XML文件赞咙,用于后面的兩個(gè)Demo
<?xml version="1.0" encoding="UTF-8"?>
<Book>
<title>XML</title>
<author>LitterL</author>
</Book>
NSXMLParser
-
代碼
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //1、創(chuàng)建URL NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/Book?type=XML"]; //2糟港、創(chuàng)建請(qǐng)求 NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url]; //3攀操、發(fā)送異步請(qǐng)求 [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { //4、創(chuàng)建解析器秸抚,并且傳入需要解析的XML數(shù)據(jù) NSXMLParser *xml = [[NSXMLParser alloc]initWithData:data]; //5速和、設(shè)置代理,監(jiān)聽解析過程 xml.delegate = self; //6剥汤、開始解析 [xml parse]; }]; } #pragma mark NSXMLParserDelegate //1颠放、開始解析 - (void)parserDidStartDocument:(NSXMLParser *)parser{ NSLog(@"開始解析------%s",__func__); } //2、開始解析XML文檔中的每一元素 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{ NSLog(@"開始解析%@-----%s",elementName,__func__); NSLog(@"%@",attributeDict); } //3秀姐、解析完XML文檔中的每一元素 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName{ NSLog(@"完成解析解析%@-----%s",elementName,__func__); } //4慈迈、解析完畢 - (void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"完成解析------%s",__func__); }
-
解析后的結(jié)果
GDataXML
-
簡(jiǎn)述:
- 下載地址:GDataXML
- 下載完GDataXML之后,把
GDataXML-master->Sources->GDataXML
直接拖入項(xiàng)目中,然后編譯,你會(huì)發(fā)現(xiàn)#import <libxml/tree.h>
這個(gè)地方是會(huì)報(bào)錯(cuò)的省有,它的上面會(huì)有地下這么一句話痒留。
// libxml includes require that the target Header Search Paths contain // // /usr/include/libxml2 // // and Other Linker Flags contain // // -lxml2
-
按照步驟完成這兩項(xiàng):
-
當(dāng)你完成上面兩個(gè)的時(shí)候,編譯一次蠢沿,你會(huì)發(fā)現(xiàn)從一個(gè)變成了二十多個(gè)錯(cuò)誤伸头,那么你的在操作了
完成上面的一些配置之后,我們就可以正式開始搬代碼了
-
代碼
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //1舷蟀、創(chuàng)建URL NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/Book?type=XML"]; //2恤磷、創(chuàng)建請(qǐng)求 NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url]; //3、發(fā)送異步請(qǐng)求 [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { //4野宜、加載所有XML數(shù)據(jù)到內(nèi)容中去 GDataXMLDocument *doc= [[GDataXMLDocument alloc]initWithData:data options:kNilOptions error:nil]; //5扫步、獲取根元素 GDataXMLElement *rootelement = doc.rootElement; //6、獲取所有的子元素 NSArray *array = rootelement.attributes; //7匈子、獲取一個(gè)子元素 并且輸出 GDataXMLElement *elme =(GDataXMLElement *)array[0]; NSLog(@"%@",[[elme attributeForName:@"title"] stringValue]); NSLog(@"%@",[[elme attributeForName:@"author"] stringValue]); }]; }
-
解析后的結(jié)果
本章到此結(jié)束
歡迎各位碼友隨意轉(zhuǎn)載并指正