標籤: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