iOS学习之路 XML处理

移动开发 iOS
本文介绍的iOS学习之路 XML处理,关于XML的操作,我们也介绍过几篇文章了,先来看内容清晰内容。

iOS学习之路 XML处理是本文要介绍的内容,主要介绍了XML文件的操作,具体详细内容我们看内容。不多说,直接进入话题。

解析不是utf-8的xml文件(尤其是中文网站的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:打开一个xml文件,读取内容到NSData中

2:调用NSXMLParse的nitWithData方法,并设置代理tweetParser.delegate = self;

3:调用回调函数

注意:xml文件的第一个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]调用来得到错误的信息:

  1. NSXMLParserErrorDomain error 4: xml文件格式有问题(如上面)   
  2. NSXMLParserErrorDomain error 5: 打开文件失败  

iOS 4.1中如果不显示实现NSXMLParseDelegate的话会有一条warning的提示,但是实行是没有问题的。

  1. //开始解析前,可以做一些初始话的工作   
  2. - (void)parserDidStartDocument:(NSXMLParser *)parser {    
  3. }    
  4. - (void)parserDidStartDocument:(NSXMLParser *)parser {  
  5. }   
  6.  
  7. //解析到一个开始tag,开始tag中可能会有properpies,例如<book catalog="Programming">   
  8. //所有的属性都储存在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. //这时处理例如<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. //处理到一个结束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解析结束   
  53. - (void)parserDidEndDocument:(NSXMLParser *)parser {    
  54. }    
  55. - (void)parserDidEndDocument:(NSXMLParser *)parser {  
  56. }   
  57.  
  58. //例子,这里要特别注意的是dataWithContentsOfFile后面一定要根绝对路径,而NSBundle能根据文件名来得到这个绝对路径。   
  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. }   

小结:iOS学习之路 XML处理的内容介绍完了,希望本文对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-07-21 11:25:13

iOS 窗口 事件

2011-07-22 14:29:32

iOS 文件

2011-07-21 17:11:15

iOS 日期 间隔

2014-06-18 09:55:29

iOS开发者学习Android

2014-07-28 14:04:26

2011-08-04 18:39:32

iOS XML

2009-02-26 13:35:10

XMLSAXParserJDOM

2009-09-14 14:47:57

XML节点

2011-04-18 10:21:37

XML

2011-04-18 10:47:06

XML

2009-10-16 15:48:43

如何学习Java

2009-02-05 17:28:01

ScalaFriendFeedXML

2009-06-22 14:26:12

ScalaXML对象

2011-06-17 09:58:26

Qt Chapter QObject

2011-06-17 10:19:11

Qt QWidge QSetting

2009-08-05 16:32:25

Smooks 1.2框

2011-04-12 12:44:09

XML

2009-09-17 13:38:42

LINQ to XML

2015-08-24 09:19:05

ios9split scree

2009-02-10 09:23:03

DOM模型MSXML
点赞
收藏

51CTO技术栈公众号