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

iPhone開發(fā) NSXMLParser解析XML文件教程

移動(dòng)開發(fā) iOS
本文介紹的是iPhone開發(fā) NSXMLParser解析xml文件教程,很詳細(xì)的介紹了如何計(jì)息XML的內(nèi)容,先來想、看詳細(xì)內(nèi)容。

iPhone開發(fā) NSXMLParser解析xml文件教程是本文要介紹的內(nèi)容,本文主要是以代碼實(shí)現(xiàn)的,來看代碼。xml文件如下:Question.xml,放在Resource文件目錄中

 

  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <Root>   
  3. <Question>   
  4. <QuestionTitle>你的學(xué)習(xí)成績(jī)?nèi)绾危?/span></QuestionTitle>   
  5. <Answers>   
  6. <Answer>   
  7. <Result>主要科目成績(jī)較好</Result>   
  8. <Evaluate>對(duì)自己的學(xué)習(xí)成績(jī)一定要如實(shí)回答。</Evaluate>   
  9. </Answer>   
  10. <Answer>   
  11. <Result>大概可在中等偏上水平</Result>   
  12. <Evaluate>如果成績(jī)不好則應(yīng)說明理由。</Evaluate>   
  13. </Answer>   
  14. <Answer>   
  15. <Result>成績(jī)特好,在我們班老數(shù)第一</Result>   
  16. <Evaluate>應(yīng)表現(xiàn)出對(duì)學(xué)習(xí)的態(tài)度是認(rèn)真的。</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. //實(shí)現(xiàn)單利方法   
  36. +(IVPaserXMLSingleton *) GetInstance;   
  37.  
  38. //解析xml文件 并將解析后的結(jié)果封裝到列表中返回   
  39. - (NSMutableArray*) GetArrayByPaserXML;   
  40.  
  41. @end   
  42.  
  43. IVPaserXMLSingleton.m 文件如下,為單例類   
  44.  
  45. @implementation IVPaserXMLSingleton   
  46.  
  47. static IVPaserXMLSingleton *instance;  //單例對(duì)象   
  48. BOOL flag = YES;                               //是否為一個(gè)節(jié)點(diǎn) 重復(fù)的賦值   
  49. NSString* m_strCurrentElement;  //讀到的當(dāng)前節(jié)點(diǎn)的名   
  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.         //設(shè)置該類本身為代理類   
  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. //讀到開始標(biāo)簽 flag = YES   
  86. flag = YES;   
  87.  
  88. // 紀(jì)錄當(dāng)前解析的節(jié)點(diǎn)   
  89. m_strCurrentElement = elementName;   
  90.  
  91. ////讀到xml的跟結(jié)點(diǎn)的開始標(biāo)簽   
  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. //讀到結(jié)束標(biāo)簽 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、如果節(jié)點(diǎn)的值過長(zhǎng),如<Result>...</Result>中間有很長(zhǎng)一段內(nèi)容,那么解析的過程中會(huì)將這段內(nèi)容截成幾段來讀取,即:-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string方法會(huì)被重復(fù)的調(diào)用,直到所有的內(nèi)容讀取結(jié)束,所以這時(shí)如果用:m_ansModel.m_strResult = string;這種方式賦值,得到就會(huì)是不全的內(nèi)容,解決辦法是用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啦。

以上為個(gè)人的總結(jié),希望對(duì)大家有幫助

小結(jié):iPhone開發(fā) NSXMLParser解析XML文件教程的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!

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

2011-08-08 14:13:47

iPhone XML NSXMLParse

2011-08-22 12:01:38

iPhone開發(fā)文件

2011-08-10 15:48:10

iPhone網(wǎng)絡(luò)

2011-07-08 14:58:16

iPhone Xcode iOS

2011-07-08 16:02:24

iphone

2011-08-10 18:24:22

iPhone 圖形 繪圖

2011-08-02 17:37:01

IPhone開發(fā) 環(huán)境搭建

2011-08-03 17:44:57

iPhone App 文件

2022-03-22 09:41:31

Java編程語(yǔ)言持久化

2011-07-18 09:35:29

iPhone 框架

2011-08-09 13:10:32

iPhone地圖開發(fā)

2011-07-21 10:29:18

iPhone 開發(fā)

2011-08-15 15:26:20

iPhone開發(fā)CocoaXML

2010-07-26 15:06:29

Perl解析XML文件

2011-07-18 12:29:10

2011-07-18 11:39:58

iPhone 游戲 引擎

2011-07-18 11:23:29

iPhone 游戲 動(dòng)畫

2011-08-16 10:01:02

2011-08-08 18:19:09

iPhone音頻播放

2011-08-10 10:23:20

iPhoneArchivingNSCoder
點(diǎn)贊
收藏

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