json和XML

來源:互聯網
上載者:User

標籤:rss   tin   ...   parser   class   arch   服務端   span   har   

                            發請求(url)
1.client  ----------------》服務端
               發送資料(Json/xml)
                     < ---------------------------



1. XML格式

        常見: plist檔案, 網易新聞, 新浪新聞

        XML文檔

        標籤/節點    <root></root>   最外層的root 稱為根節點
        標籤名        root
        
        <CityName>北京</CityName>
        標籤值/節點值        北京        

        <Item key="1" value="報紙"> </Item>
         key="1" 屬性節點
        屬性: key="1"
        屬性名稱:    key
        屬性值:    "1"

    *xml資料(文檔)自上而下的樹形結構
    *<root>.....</root>(一個完整的節點),root節點的名稱(標題) 中間的(....)為節點的內容
     *每一個xml文檔僅僅有一個根節點(樹形結構中最外層的節點)
     *xml文檔(資料)由多個節點群組成(根節點->子節點->子節點....)
     */
二叉樹


JSON
JSON(JavaScript Object Notation)一種輕量級的資料交換格式,具有良好的可讀和便於高速編寫的特性。可在不同平台之間進行資料交換。JSON採用相容性非常高的、全然獨立於語言文字格式設定,同一時候也具備類似於C語言的習慣(包含C, C++, C#, Java, JavaScript, Perl, Python等)體系的行為。

這些特性使JSON成為理想的資料交換語言。


 
XML
擴充標記語言 (Extensible Markup Language, XML) ,用於標記電子檔案使其具有結構性的標記語言。能夠用來標記資料、定義資料類型。是一種同意使用者對自己的標記語言進行定義的源語言。 XML使用DTD(document type definition)文件類型定義來組織資料;格式統一,跨平台和語言。早已成為業界公認的標準

json(相對於xml的資料,輕巧,傳輸速率高,冗餘的資料少。缺點:可讀性差些)

xml(冗餘的資料多,長處:可讀性強,擴充性強)
/*xml 可延伸標記語言 (XML),主要用於client與服務端進行資料互動。


     *xml資料特點:一種自上而下的樹形結構,有且僅僅有一個根節點:<root>...</root>
     *解析xml資料的過程,就是擷取節點內容的過程
     *xml 與json: xml資料可讀性強、擴充性強,可是沒有json格式的資料輕巧,冗餘的資料較多
 */

NSJSONS…….
SBJson

1.系統  NSXMLParser  比較複雜
   
2.第三方開源庫 GData  經常使用  或者 kissxml

    解析xml常常使用庫:    GData
        底層使用系統的libxml2庫, 使用的時候加入libxml2

        (1)匯入GData庫, 直接拖進來
        (2)設定標頭檔搜尋路徑  
            Build Setting--->header  search Path
            加入   /usr/include/libxml2

        (3)加入libxml二進位庫
            Build Phases ---> Link Binary
            加入     libxml2.dylib

        (4)假設是arc的project
            Build Phases ---> Compile Source File
                GDataXmlNode.m(非arc的)

GData 第三方庫 有兩種方式解析
1.擷取根節點全部元素   遍曆全部的子節點

2.xpath文法
    

    2. XPath擷取指定的節點
    @“http://10.0.8.8/sns/my/user_list.php?format=xml&page=1&number=10”  得到的時xml 格式的資料

//新浪新聞
http://rss.sina.com.cn/sina_all_opml.xml


掌握的函數


GDataXMLNode

擷取當前節點的值
- (NSString *)stringValue;
//擷取當前節點子節點的個數
- (NSUInteger)childCount;
//擷取子節點數組
- (NSArray *)children;
//依據索引擷取子節點
- (GDataXMLNode *)childAtIndex:(unsigned)index;

GDataXMLElement
//依據節點名字擷取全部的節點名為name的節點數組
- (NSArray *)elementsForName:(NSString *)name;
//擷取節點的屬性
- (NSArray *)attributes;
//依據屬性名稱擷取屬性節點
- (GDataXMLNode *)attributeForName:(NSString *)name;

GDataXMLDocument
//建立文檔樹
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding error:(NSError **)error;
//擷取跟節點
- (GDataXMLElement *)rootElement;

//依據xpath 文法 擷取 指定的節點數組
- (NSArray *)nodesForXPath:(NSString *)xpath error:(NSError **)error;

擴充的函數 在GData 上添加的函數

//add by lzx 2014-05-28
//我們能夠給這個開源庫擴充 一些 沒有的新方法
//那麼以後僅僅要匯入這個當前檔案的原始碼 那麼就能夠直接使用了

//獲得當前節點的指定名稱name(僅僅有一個叫name的子節點)的子節點的文本資訊(值)
-(NSString *)stringValueByName:(NSString*)subName;
//獲得當前節點的指定名稱name(假設有多個同名子節點)的子節點的文本資訊(值)
-(NSArray *)stringValuesByName:(NSString*)subName;
//獲得當前節點的指定名稱attrName屬性的值
-(NSString*)attributeValueByName:(NSString*)attrName;
//獲得當前節點指定名稱全部子節點(數組中為要獲得的全部子節點的名稱)的值
-(NSDictionary *)subDictWithArray:(NSArray*)subNames;

json和XML

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.