成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iPhone開發 NSXMLParser解析XML文件教程

移動開發 iOS
本文介紹的是iPhone開發 NSXMLParser解析xml文件教程,很詳細的介紹了如何計息XML的內容,先來想、看詳細內容。

iPhone開發 NSXMLParser解析xml文件教程是本文要介紹的內容,本文主要是以代碼實現的,來看代碼。xml文件如下:Question.xml,放在Resource文件目錄中

 

  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <Root>   
  3. <Question>   
  4. <QuestionTitle>你的學習成績如何?</QuestionTitle>   
  5. <Answers>   
  6. <Answer>   
  7. <Result>主要科目成績較好</Result>   
  8. <Evaluate>對自己的學習成績一定要如實回答。</Evaluate>   
  9. </Answer>   
  10. <Answer>   
  11. <Result>大概可在中等偏上水平</Result>   
  12. <Evaluate>如果成績不好則應說明理由。</Evaluate>   
  13. </Answer>   
  14. <Answer>   
  15. <Result>成績特好,在我們班老數第一</Result>   
  16. <Evaluate>應表現出對學習的態度是認真的。</Evaluate>   
  17. </Answer>   
  18. </Answers>   
  19. </Question>   
  20. </Root>   
  21.  
  22. IVPaserXMLSingleton.h 文件如下   
  23.  
  24. #import <Foundation/Foundation.h>   
  25. #import "IVQuestionModel.h"   
  26. #import "IVAnswerModel.h"   
  27.  
  28. @interface IVPaserXMLSingleton : NSObject {   
  29. NSXMLParser*m_parser;                 //xml 解析類   
  30. IVQuestionModel* m_queModel;     //問題的封裝類   
  31. IVAnswerModel* m_ansModel;        //問題答案的封裝類   
  32. NSMutableArray* m_arrXMLNode;   //xml解析后的封裝的array列表   
  33. }   
  34.  
  35. //實現單利方法   
  36. +(IVPaserXMLSingleton *) GetInstance;   
  37.  
  38. //解析xml文件 并將解析后的結果封裝到列表中返回   
  39. - (NSMutableArray*) GetArrayByPaserXML;   
  40.  
  41. @end   
  42.  
  43. IVPaserXMLSingleton.m 文件如下,為單例類   
  44.  
  45. @implementation IVPaserXMLSingleton   
  46.  
  47. static IVPaserXMLSingleton *instance;  //單例對象   
  48. BOOL flag = YES;                               //是否為一個節點 重復的賦值   
  49. NSString* m_strCurrentElement;  //讀到的當前節點的名   
  50.  
  51. + (IVPaserXMLSingleton *)GetInstance {   
  52. @synchronized(self) {   
  53. if (instance == nil) {   
  54. instance = [[self alloc] init];   
  55. }   
  56. }   
  57. return instance;   
  58. }   
  59.  
  60. - (NSMutableArray*) GetArrayByPaserXML {   
  61. //獲取xml文件   
  62. NSString* pathpath = path = [[NSBundle mainBundle] pathForResource:@"Question" ofType:@"xml"];   
  63. NSFileHandle* file = [NSFileHandle fileHandleForReadingAtPath:path];   
  64. NSData* data = [file readDataToEndOfFile];   
  65. [file closeFile];   
  66.  
  67.        m_parser = [[NSXMLParser alloc] initWithData:data];   
  68.  
  69.         //設置該類本身為代理類   
  70.         [m_parser setDelegate:self];   
  71.  
  72. BOOL flag = [m_parser parse];   
  73. if (flag) {   
  74. NSLog(@"獲取指定路徑的xml文件成功");   
  75. } else {   
  76. NSLog(@"獲取指定路徑的xml文件失敗");   
  77. }   
  78. [m_parser release];   
  79. return m_arrXMLNode;   
  80. }   
  81.  
  82. - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName   
  83. namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName   
  84. attributes: (NSDictionary *)attributeDict {   
  85. //讀到開始標簽 flag = YES   
  86. flag = YES;   
  87.  
  88. // 紀錄當前解析的節點   
  89. m_strCurrentElement = elementName;   
  90.  
  91. ////讀到xml的跟結點的開始標簽   
  92. if ([elementName isEqualToString:@"Root"]) {   
  93. m_arrXMLNode = [[NSMutableArray alloc] init];   
  94. }   
  95.  
  96. //解析面試問題的xml文件   
  97. if ([m_xmlType isEqualToString:@"Question"]) {   
  98. if ([elementName isEqualToString:@"Question"]) {   
  99. m_queModel = [[IVQuestionModel alloc] init];   
  100. m_queModel.m_arrAnswers = [[NSMutableArray alloc] init];   
  101. } else if ([elementName isEqualToString:@"Answer"]) {   
  102. m_ansModel = [[IVAnswerModel alloc] init];   
  103. }   
  104. }   
  105. }   
  106.  
  107. -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {   
  108. if (flag) {   
  109. //解析面試問題的xml文件   
  110. if ([m_xmlType isEqualToString:@"Question"]) {   
  111. if ([m_strCurrentElement isEqualToString:@"QuestionTitle"]) {   
  112. m_queModel.m_strQuestionTitle = string;   
  113. } else if ([m_strCurrentElement isEqualToString:@"Result"]) {   
  114. m_ansModel.m_strResult = string;   
  115. } else if ([m_strCurrentElement isEqualToString:@"Evaluate"]) {   
  116. m_ansModel.m_strEvaluate = string;   
  117. }   
  118. }   
  119. }   
  120. }  
  1. -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {   
  2. //讀到結束標簽 flag = NO   
  3. flag = NO;   
  4.  
  5. //解析面試問題的xml文件   
  6. if ([m_xmlType isEqualToString:@"Question"]) {   
  7. if ([elementName isEqualToString:@"Question"]) {   
  8. [m_arrXMLNode addObject:m_queModel];   
  9. [[m_queModel m_arrAnswers] release];   
  10. [m_queModel release];   
  11. m_queModel = nil;   
  12. }   
  13. if ([elementName isEqualToString:@"Answer"]) {   
  14. [[m_queModel m_arrAnswers] addObject:m_ansModel];   
  15. [m_ansModel release];   
  16. m_ansModel = nil;   
  17. }   
  18. }   
  19. }   
  20.  
  21. - (void)parserDidStartDocument:(NSXMLParser *)parser {   
  22. NSLog(@"開始解析xml文件");   
  23. }   
  24.  
  25. - (void)parserDidEndDocument:(NSXMLParser *)parser {   
  26. NSLog(@"解析xml文件完成");   
  27. }   
  28. @end  

大致過程就是這樣,常遇到的問題:

1、如果xml文件讀取失敗,可能是xml的文件格式不正確,可以在window下用ie打開該xml文件可以快速的查看是否xml文件的格式有問題。

2、如果節點的值過長,如<Result>...</Result>中間有很長一段內容,那么解析的過程中會將這段內容截成幾段來讀取,即:-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string方法會被重復的調用,直到所有的內容讀取結束,所以這時如果用:m_ansModel.m_strResult = string;這種方式賦值,得到就會是不全的內容,解決辦法是用NSMutableString類型的去接收讀到的值,大概像這樣:

  1. if (m_ansModel.m_strResult == nil) {   
  2. m_ansModel.m_strResult = [[NSMutableString alloc] initWithString:string];   
  3. } else {   
  4. [m_ansModel.m_strResult appendString:string];   
  5. }  

其中m_strResult為NSMutableString類型。就ok啦。

以上為個人的總結,希望對大家有幫助

小結:iPhone開發 NSXMLParser解析XML文件教程的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-08 14:13:47

iPhone XML NSXMLParse

2011-08-22 12:01:38

iPhone開發文件

2011-08-10 15:48:10

iPhone網絡

2011-08-02 17:37:01

IPhone開發 環境搭建

2011-07-08 14:58:16

iPhone Xcode iOS

2011-08-10 18:24:22

iPhone 圖形 繪圖

2011-07-08 16:02:24

iphone

2011-08-03 17:44:57

iPhone App 文件

2011-08-09 13:10:32

iPhone地圖開發

2011-07-21 10:29:18

iPhone 開發

2011-07-18 09:35:29

iPhone 框架

2011-08-15 15:26:20

iPhone開發CocoaXML

2022-03-22 09:41:31

Java編程語言持久化

2011-07-27 16:46:04

iPhone iPhone破解 MacPort

2011-08-12 10:09:23

iPhone開發多線程

2011-07-18 10:53:09

2011-08-15 11:31:27

iPhone開發日志

2011-07-18 11:07:12

iPhone 游戲 引擎

2011-08-08 18:19:09

iPhone音頻播放

2011-08-10 10:23:20

iPhoneArchivingNSCoder
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产中文视频 | www.久草.com| 亚洲欧美日韩电影 | 一二区视频 | 欧美专区日韩专区 | 欧美综合久久 | 中日韩av | 久久日韩粉嫩一区二区三区 | 久久国产成人精品国产成人亚洲 | 欧美13videosex性极品 | 亚洲在线一区 | 国产精品久久国产精品 | 视频一区欧美 | 中文字幕在线观看一区 | 欧美一区二区三区在线看 | 日本中文字幕日韩精品免费 | 久国产视频 | 精品国产乱码久久久久久88av | 亚洲久久 | 亚洲欧美在线一区 | 亚洲欧美日韩网站 | 俺去俺来也www色官网cms | www.亚洲成人网 | 秋霞精品| 久久国产电影 | 欧美一级黄色片 | 69xxx免费| 天天操夜夜操 | 91新视频 | 成人在线中文字幕 | 久久成| 免费成年网站 | 综合成人在线 | 国产aa| 欧美激情一区二区 | 精品久久久久久久久久久院品网 | 99久久精品国产一区二区三区 | 永久看片| 成人亚洲片 | 国产精品麻 | 亚洲久久久 |