自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS學(xué)習(xí)之路 XML處理

移動(dòng)開發(fā) iOS
本文介紹的iOS學(xué)習(xí)之路 XML處理,關(guān)于XML的操作,我們也介紹過幾篇文章了,先來看內(nèi)容清晰內(nèi)容。

iOS學(xué)習(xí)之路 XML處理是本文要介紹的內(nèi)容,主要介紹了XML文件的操作,具體詳細(xì)內(nèi)容我們看內(nèi)容。不多說,直接進(jìn)入話題。

解析不是utf-8的xml文件(尤其是中文網(wǎng)站的rss文件):

如果url中有中文:

  1. view plaincopy to clipboardprint?const char *str = [searchURL UTF8String];    
  2. NSString *url = [NSString stringWithUTF8String:str];    
  3. url = [url stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];    
  4. NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];    
  5. const char *str = [searchURL UTF8String];  
  6. NSString *url = [NSString stringWithUTF8String:str];  
  7. url = [url stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];  
  8. NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];  

gbk編碼的xml文件:

  1. NSString *xmlStr = [[NSString alloc] initWithData:inData encoding:0x80000632];    
  2. NSString *newXMLStr = [xmlStr stringByReplacingOccurrencesOfString:@"encoding=/"gbk/"" withString:@"encoding=/"UTF-8/""];    
  3. NSXMLParser *nextParser = [[NSXMLParser alloc] initWithData:[newXMLStr dataUsingEncoding:NSUTF8StringEncoding]];    
  4. NSString *xmlStr = [[NSString alloc] initWithData:inData encoding:0x80000632];  
  5. NSString *newXMLStr = [xmlStr stringByReplacingOccurrencesOfString:@"encoding=/"gbk/"" withString:@"encoding=/"UTF-8/""];  
  6. NSXMLParser *nextParser = [[NSXMLParser alloc] initWithData:[newXMLStr dataUsingEncoding:NSUTF8StringEncoding]];  

在iOS中解析XML

以讀文件的形式

iOS中的XML是event-driven模式

1:打開一個(gè)xml文件,讀取內(nèi)容到NSData中

2:調(diào)用NSXMLParse的nitWithData方法,并設(shè)置代理tweetParser.delegate = self;

3:調(diào)用回調(diào)函數(shù)

注意:xml文件的第一個(gè)tag必須要頂格寫!

  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <bookstore>    
  3.       <book catalog="Programming">    
  4.           <title lang="en">C++ Programming Language</title>    
  5.           <author>Bjarne Stroustrup</author>    
  6.           <year>1998</year>    
  7.           <price>98.0</price>    
  8.       </book>    
  9.     <book catalog="Networking">    
  10.           <title lang="en">TCP/IP Illustrated</title>    
  11.           <author>Richard Stevens</author>    
  12.           <year>1996</year>    
  13.           <price>56.0</price>    
  14.     </book>    
  15. </bookstore>    
  16. <?xml version="1.0" encoding="UTF-8"?> 
  17. <bookstore> 
  18.       <book catalog="Programming"> 
  19.           <title lang="en">C++ Programming Language</title> 
  20.           <author>Bjarne Stroustrup</author> 
  21.           <year>1998</year> 
  22.           <price>98.0</price> 
  23.       </book> 
  24.     <book catalog="Networking"> 
  25.           <title lang="en">TCP/IP Illustrated</title> 
  26.           <author>Richard Stevens</author> 
  27.           <year>1996</year> 
  28.           <price>56.0</price> 
  29.     </book> 
  30. </bookstore>  

可以[NSXMLParser parserError]調(diào)用來得到錯(cuò)誤的信息:

  1. NSXMLParserErrorDomain error 4: xml文件格式有問題(如上面)   
  2. NSXMLParserErrorDomain error 5: 打開文件失敗  

iOS 4.1中如果不顯示實(shí)現(xiàn)NSXMLParseDelegate的話會(huì)有一條warning的提示,但是實(shí)行是沒有問題的。

  1. //開始解析前,可以做一些初始話的工作   
  2. - (void)parserDidStartDocument:(NSXMLParser *)parser {    
  3. }    
  4. - (void)parserDidStartDocument:(NSXMLParser *)parser {  
  5. }   
  6.  
  7. //解析到一個(gè)開始tag,開始tag中可能會(huì)有properpies,例如<book catalog="Programming">   
  8. //所有的屬性都儲(chǔ)存在attributeDict中   
  9. - (void)parser:(NSXMLParser *)parser    
  10.         didStartElement:(NSString *)elementName    
  11.         namespaceURI:(NSString *)namespaceURI    
  12.         qualifiedName:(NSString *)qualifiedName    
  13.         attributes:(NSDictionary *)attributeDict {    
  14.        
  15.     if ([elementName isEqual:@"book"]) {    
  16.         NSString *catalog =  [attributeDict objectForKey:@"catalog"];    
  17.     }    
  18.     else if([bookTags containsObject:elementName]){           
  19.     }    
  20. }    
  21. - (void)parser:(NSXMLParser *)parser  
  22.         didStartElement:(NSString *)elementName  
  23.         namespaceURI:(NSString *)namespaceURI  
  24.         qualifiedName:(NSString *)qualifiedName  
  25.         attributes:(NSDictionary *)attributeDict {  
  26.      
  27.     if ([elementName isEqual:@"book"]) {  
  28.         NSString *catalog =  [attributeDict objectForKey:@"catalog"];  
  29.     }  
  30.     else if([bookTags containsObject:elementName]){         
  31.     }  
  32. }   
  33.  
  34. //這時(shí)處理例如<title lang="en">C++ Programming Language</title>的情況   
  35. - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {    
  36. }    
  37. - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {  
  38. }   
  39.  
  40. //處理到一個(gè)結(jié)束tag   
  41. - (void)parser:(NSXMLParser *)parser    
  42.         didEndElement:(NSString *)elementName    
  43.         namespaceURI:(NSString *)namespaceURI    
  44.         qualifiedName:(NSString *)qName {    
  45. }    
  46. - (void)parser:(NSXMLParser *)parser  
  47.         didEndElement:(NSString *)elementName  
  48.         namespaceURI:(NSString *)namespaceURI  
  49.         qualifiedName:(NSString *)qName {  
  50. }   
  51.  
  52. //xml解析結(jié)束   
  53. - (void)parserDidEndDocument:(NSXMLParser *)parser {    
  54. }    
  55. - (void)parserDidEndDocument:(NSXMLParser *)parser {  
  56. }   
  57.  
  58. //例子,這里要特別注意的是dataWithContentsOfFile后面一定要根絕對(duì)路徑,而NSBundle能根據(jù)文件名來得到這個(gè)絕對(duì)路徑。   
  59. -(void) testXMLParse{    
  60.     NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@"test.xml" ofType:nil inDirectory:nil];    
  61.        
  62.     NSData *fileData = [NSData dataWithContentsOfFile:xmlPath];    
  63.        
  64.     NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:fileData];    
  65.     [xmlParser setDelegate:self];    
  66.     BOOL result = [xmlParser parse];    
  67.     if (!result) {    
  68.         NSLog(@"The error is %@", [xmlParser parserError]);    
  69.     }    
  70.     //[xmlParser release];     
  71. }   

小結(jié):iOS學(xué)習(xí)之路 XML處理的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-22 14:29:32

iOS 文件

2011-07-21 11:25:13

iOS 窗口 事件

2011-07-21 17:11:15

iOS 日期 間隔

2014-06-18 09:55:29

iOS開發(fā)者學(xué)習(xí)Android

2014-07-28 14:04:26

2009-02-26 13:35:10

XMLSAXParserJDOM

2011-08-04 18:39:32

iOS XML

2009-09-14 14:47:57

XML節(jié)點(diǎn)

2011-04-18 10:21:37

XML

2011-04-18 10:47:06

XML

2009-10-16 15:48:43

如何學(xué)習(xí)Java

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-17 09:58:26

Qt Chapter QObject

2009-06-22 14:26:12

ScalaXML對(duì)象

2009-02-05 17:28:01

ScalaFriendFeedXML

2011-04-12 12:44:09

XML

2009-09-17 13:38:42

LINQ to XML

2024-08-14 08:11:41

2009-08-05 16:32:25

Smooks 1.2框

2021-05-24 16:01:35

人工智能AI機(jī)器學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)