iOS開發(fā)-XML解析-創(chuàng)新互聯(lián)

以請(qǐng)求本地文件中的XML數(shù)據(jù)為例,說明iOS下如何用蘋果自帶類NSXMLParser解析XML數(shù)據(jù)。

創(chuàng)新互聯(lián)建站專注于巴青網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供巴青營銷型網(wǎng)站建設(shè),巴青網(wǎng)站制作、巴青網(wǎng)頁設(shè)計(jì)、巴青網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造巴青網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供巴青網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

本地文件students.xml中的數(shù)據(jù)格式如下:

<?xml version="1.0" encoding="UTF-8"?>

<AllStudents>

  <message>StudentInfo</message>

  <student>

    <name>Tom</name>

    <age>10</age>

    <school>JiangSu University</school>

  </student>

  <student>

    <name>James</name>

    <age>22</age>

    <school>NanJing University</school>

  </student>

  <student>

    <name>John</name>

    <age>23</age>

    <school>HongKong University</school>

  </student>

</AllStudents>

詳細(xì)解析步驟

.h文件

聲明代理:<NSXMLParserDelegate>

定義屬性:

@property(nonatomic,retain)NSString *currentValue;

@property(nonatomic,retain)NSMutableDictionary *messageDic;

@property(nonatomic,retain)NSMutableDictionary *studentInfoDic;

@property(nonatomic,retain)NSMutableArray *finalArray;

.m文件

@synthesize currentValue = _currentValue;

@synthesize messageDic = _messageDic;

@synthesize studentInfoDic = _studentInfoDic;

@synthesize finalArray = _finalArray;

- (void)viewDidLoad

{

  [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

  // 獲取xml文件的路徑

  NSString*xmlPath=[[NSBundle mainBundle] pathForResource:@"students"ofType:@"xml"];

  // 轉(zhuǎn)化為Data

  NSData *data = [[NSData alloc] initWithContentsOfFile:xmlPath];

  // 初始化

  NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];

  // 代理

  xmlParser.delegate = self;

  // 開始解析

  BOOL flag = [xmlParser parse];

  if (flag) {

    NSLog(@"解析成功");

    NSLog(@"self.finalArray = %@",_finalArray);

  }

  else{

    NSLog(@"解析出錯(cuò)");

  }

  [data release];

  [xmlParser release];

}

//代理方法

//開始解析

-(void)parserDidStartDocument:(NSXMLParser *)parser

{

  // 用數(shù)組存儲(chǔ)每一組信息

  self.finalArray = [[[NSMutableArray alloc] init]autorelease];

}

//開始節(jié)點(diǎn)

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

{

  if ([elementName isEqualToString:@"message"]) {

    self.messageDic = nil;

    self.messageDic = [[[NSMutableDictionary alloc] initWithCapacity:0]autorelease];

  }

  if ([elementName isEqualToString:@"student"]) {

    self.studentInfoDic = nil;

    self.studentInfoDic = [[[NSMutableDictionary alloc]initWithCapacity:1]autorelease];

  }

}

//發(fā)現(xiàn)節(jié)點(diǎn)值時(shí)

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

  self.currentValue = string;//currentValue暫存節(jié)點(diǎn)值

}

//結(jié)束節(jié)點(diǎn)時(shí)

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

{

  if ([elementName isEqualToString:@"message"]) {

    [self.messageDic setObject:_currentValue forKey:elementName];

    //<message>元素存入數(shù)組

    [self.finalArray addObject:_messageDic];

  }

  if ([elementName isEqualToString:@"name"]||

      [elementName isEqualToString:@"age"]||

      [elementName isEqualToString:@"school"])

    {

            //發(fā)現(xiàn)student的具體信息:age,name,school存入字典

      [self.studentInfoDic setObject:_currentValue forKey:elementName];

    }

  if ([elementName isEqualToString:@"student"]) {

    //<student>元素存入數(shù)組

       [self.finalArray addObject:_studentInfoDic];

  }

  self.currentValue = @"";

}

最終的結(jié)果如下:

2014-06-02 14:03:02.104 XMLParser[5102:60b] 解析成功

2014-06-02 14:03:02.108 XMLParser[5102:60b] self.finalArray = (

    {

    message = StudentInfo;

  },

    {

    age = 10;

    name = Tom;

    school = "JiangSu University";

  },

    {

    age = 22;

    name = James;

    school = "NanJing University";

  },

    {

    age = 23;

    name = John;

    school = "HongKong University";

  }

)

以下總結(jié)來自:http://blog.csdn.net/like7xiaoben/article/details/7699965

注意:

解析xml數(shù)據(jù)的時(shí)候,

   每當(dāng)遇到元素節(jié)點(diǎn)的時(shí)候都會(huì)執(zhí)行didStartElement代理方法,如果有屬性節(jié)點(diǎn),可以直接在這個(gè)方法中獲取屬性的值;

   每當(dāng)遇到文本節(jié)點(diǎn)的時(shí)候都會(huì)執(zhí)行foundCharacters代理方法,獲取文本節(jié)點(diǎn)中的值然后到didEndElement方法中進(jìn)行區(qū)分。

     如果是換行符的話也會(huì)獲取,因?yàn)閾Q行符也是文本節(jié)點(diǎn),不過當(dāng)一個(gè)元素節(jié)點(diǎn)結(jié)束后的換行符是不會(huì)獲取的。

  比如說:    (換行符1)

              <li>文本節(jié)點(diǎn)</li>

                     (換行符2)

元素節(jié)點(diǎn)前后各有一個(gè)換行符,這時(shí)只會(huì)獲取換行符1,而不會(huì)獲取換行符2。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁名稱:iOS開發(fā)-XML解析-創(chuàng)新互聯(lián)
新聞來源:http://muchs.cn/article36/dchssg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作云服務(wù)器、定制網(wǎng)站、網(wǎng)站維護(hù)、動(dòng)態(tài)網(wǎng)站、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)