GDataXML之解析XML

                                          第一部分  使用GDataXML寫XML文件php

/*css

 <!-- 7.客戶端請求通信錄信息 -->html

 <iq type="get" from="jaywon@localhost/3a5054e5" to="localhost" id="123456">node

          <query xmlns="jabber:iq:roster"/>web

 </iq>服務器

 

 type 屬性,說明了該 iq 的類型爲 get,與 HTTP 相似,向服務器端請求信息ide

 from 屬性,消息來源,這裏是你的 JID編碼

 to 屬性,消息目標,這裏是服務器域名url

 id 屬性,標記該請求 ID,當服務器處理完畢請求 get 類型的 iq 後,響應的 result 類型 iq ID 請求 iq ID 相同spa

 <query xmlns="jabber:iq:roster"/> 子標籤,說明了客戶端須要查詢 roster

 */

假設我有上面這樣一段文字,須要寫成XML文件,那麼咱們能夠使用GDataXML去寫,那麼思路又是什麼呢?

思路:

 /**

     *使用GDataXMLXML的思路

     *

     *1.建立根節點

     *2.建立屬性節點

     *3.把屬性節點添加到根節點

     *4.建立子節點,並把它添加到根節點

     *5.根據根節點建立document對象

     *6.添加xml版本與編碼信息

     *7.保存寫好的xml

     */

代碼以下:

                                                第二部分 解析XML文件

假設服務器返回的XML數據以下:

/*<?xml version="1.0" encoding="UTF-8"?>

 <!-- 這是xml註釋 -->

 <catalog>

     <cd country="USA">

         <title>Empire Burlesque</title>

         <artist>Bob Dylan</artist>

         <price>10.90</price>

     </cd>

     <cd country="UK">

         <title>Hide your heart</title>

         <artist>Bonnie Tyler</artist>

         <price>9.10</price>

     </cd>

     <cd country="USA">

         <title>Greatest Hits</title>

         <artist>Dolly Parton</artist>

         <price>9.90</price>

     

 </cd>

 </catalog>

*/

須要解析出來,此時的思路又是什麼了?

思路:

/**

 *

 *使用GDataXML解析XML的思路

 *

 *1.讀取XML文件

 *2.xml文件轉換成NSData

 *3.data一次性讀取到document

 *4.document裏面拿到根節點

 *5.循環遍歷子節點

 *6.保存

 *

 */

代碼以下:

 NSString* filepath=[[NSBundle mainBundle]pathForResource:@"xml" ofType:@"xml"];

    NSData* data=[NSData dataWithContentsOfFile:filepath];

    GDataXMLDocument* document=[[GDataXMLDocument alloc]initWithData:data error:nil];

    GDataXMLElement* rootElement=[document rootElement];

    NSArray* allNode=[rootElement children];

    for (GDataXMLElement *element in allNode) {

        GDataXMLNode* node=[element attributes][0];

        NSString* namestring= [node  name];

        NSString* valueString=[node stringValue];

        NSLog(@"namestring%@",namestring);

        NSLog(@"valueString%@",valueString);

        

       NSArray* Element= [element children];

        for (GDataXMLElement* subElement in Element) {

            

            NSString *nodeName = [subElement name];

            NSString *nodeValue = [subElement stringValue];

            NSLog(@"--- %@ ", nodeName);

            NSLog(@"-%@",nodeValue);

        }

    }

結果以下:

                               第三部分  解析HTML語言

<html>

    <head>

        <meta name="audience" content="webmaster">

        <meta name="robots" content="index,follow">

        <meta name="generator" content="">

        <link href="css_js/reset.css" rel="stylesheet" type="text/css" />

        <link href="css_js/style.css" rel="stylesheet" type="text/css">

        <!--[if IE 7]>

         <link rel="stylesheet" type="text/css" href="css_js/ieseven.css" />

         <![endif]-->

        <!--[if IE 6]>

         <link rel="stylesheet" type="text/css" href="css_js/ie.css" />

         <![endif]-->

        

        <link rel="SHORTCUT ICON" href="http://www.example.com/favicon.ico" type="image/x-icon">

    </head>

    <body>

        <p><a href="abc.php">1 line<br>

            <b>Bold line</b></a></p>

        

        

        <hr />

        

        

        <p><a href="123.php">2 line<br />

            <b>Bold line</b></p>

        

        

        <hr>

        

        <p><a href="567.php">3 line<br >

            <b>Bold line</p>

    </body>

</html>

有HTML語言如上,解析思路和解析XML語言同樣

/**

 *使用GDataXML解析HTML的思路

 *

 *1.讀取HTML文件

 *2.HTML文件轉換成NSData

 *3.data一次性讀取到document

 *4.document裏面拿到根節點

 *5.循環遍歷子節點

 *6.保存

 *

 */

代碼以下:

-(void)parseHTML

{

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"html" ofType:@"html"];

    NSData *htmlData = [NSData dataWithContentsOfFile:filePath];

    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithHTMLData:htmlData error:NULL];

    NSString *xPath = @"//a/@href";

    

    NSArray *elementArr = [document nodesForXPath:xPath error:NULL];

    for (GDataXMLElement *element in elementArr) {

        NSString *nodeName = [element name];

        NSString *nodeValue = [element stringValue];

        NSLog(@"%@ - %@", nodeName, nodeValue);

    }

}

結果以下:

                               第四部分   解析XML後經過xpath取文檔中的節點

解析好XML文件以後,咱們有時會須要從文件中取對咱們有用的節點值,那麼該怎麼去了,答案是經過xpath.那麼什麼是XPath呢?

先看代碼:

-(void)parseXMLForXPath

{

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"xml" ofType:@"xml"];

    NSData *xmlData = [NSData dataWithContentsOfFile:filePath];

    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:xmlData error:NULL];

    

    NSString *xPath = @"//price[1]";

    

    NSArray *elementArr = [document nodesForXPath:xPath error:NULL];

    for (GDataXMLElement *element in elementArr) {

        NSString *nodeName = [element name];

        NSString *nodeValue = [element stringValue];

        NSLog(@"%@ - %@", nodeName, nodeValue);

    }

    printf("\n");

}

代碼中的xpath那句表示:從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。

關於xpath語法的使用,請你們參考

http://www.w3school.com.cn/xpath/xpath_syntax.asp

相關文章
相關標籤/搜索