iOS網(wǎng)絡(luò)篇-解析XML

簡(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é)果

    圖-1
  • 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):

      圖-2

      圖-3
    • 當(dāng)你完成上面兩個(gè)的時(shí)候,編譯一次蠢沿,你會(huì)發(fā)現(xiàn)從一個(gè)變成了二十多個(gè)錯(cuò)誤伸头,那么你的在操作了

      圖-4

    完成上面的一些配置之后,我們就可以正式開始搬代碼了

  • 代碼

    -(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é)果

    圖-5
                  本章到此結(jié)束
            歡迎各位碼友隨意轉(zhuǎn)載并指正
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末河胎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子虎敦,更是在濱河造成了極大的恐慌游岳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件其徙,死亡現(xiàn)場(chǎng)離奇詭異胚迫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)唾那,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門访锻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事朗若∧瘴澹” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵哭懈,是天一觀的道長(zhǎng)灾馒。 經(jīng)常有香客問我,道長(zhǎng)遣总,這世上最難降的妖魔是什么睬罗? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮旭斥,結(jié)果婚禮上容达,老公的妹妹穿的比我還像新娘。我一直安慰自己垂券,他們只是感情好花盐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菇爪,像睡著了一般算芯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凳宙,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天熙揍,我揣著相機(jī)與錄音,去河邊找鬼氏涩。 笑死届囚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的是尖。 我是一名探鬼主播意系,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼饺汹!你這毒婦竟也來了昔字?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤首繁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后陨囊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弦疮,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蜘醋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胁塞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖啸罢,靈堂內(nèi)的尸體忽然破棺而出编检,到底是詐尸還是另有隱情,我是刑警寧澤扰才,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布允懂,位于F島的核電站,受9級(jí)特大地震影響衩匣,放射性物質(zhì)發(fā)生泄漏蕾总。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一琅捏、第九天 我趴在偏房一處隱蔽的房頂上張望生百。 院中可真熱鬧,春花似錦柄延、人聲如沸蚀浆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)市俊。三九已至,卻和暖如春赎败,著一層夾襖步出監(jiān)牢的瞬間秕衙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工僵刮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留据忘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓搞糕,卻偏偏與公主長(zhǎng)得像勇吊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窍仰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開發(fā)汉规,例如說新浪微博、微信等驹吮,這些應(yīng)用本身可...
    lichengjin閱讀 3,644評(píng)論 2 7
  • JSON JSON和XML都是需要解析的 JSON是一種輕量級(jí)的數(shù)據(jù)格式针史,一般用于數(shù)據(jù)交互服務(wù)器返回給客戶端的數(shù)據(jù)...
    JonesCxy閱讀 1,847評(píng)論 2 10
  • 在工作中,不可避免的我們會(huì)頻繁從網(wǎng)絡(luò)獲取XML或者Json格式的數(shù)據(jù)碟狞,這些數(shù)據(jù)有著特定的數(shù)據(jù)結(jié)構(gòu)啄枕,必須對(duì)其進(jìn)行解析...
    Elbert_Z閱讀 922評(píng)論 0 2
  • 解析的概念 解析:從事先規(guī)定好的格式中提取數(shù)據(jù)。 解析的前提:提前約定好格式族沃,數(shù)據(jù)提供方按照格式提供數(shù)據(jù)频祝,數(shù)據(jù)獲取...
    逗逗豆豆笑閱讀 1,150評(píng)論 2 14
  • JSON解析 JSON簡(jiǎn)單介紹 JSON是一種輕量級(jí)的數(shù)據(jù)格式泌参,一般用于數(shù)據(jù)交互。服務(wù)器返回給客戶端的數(shù)據(jù)常空,一般都...
    擱淺的青蛙閱讀 1,698評(píng)論 0 4