歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

iOS -數據庫網絡之XML解析

XML文件有2種解析方式 1.基於文檔(document) 2.基於事件(sax)
 
1.IOS中XML文件獲取
 
首先要將XML導入工程中
在ViewController的按鈕事件中,代碼如下:
 
//獲取xml完整路徑
 
NSString * path=[[NSBundle mainBundle] pathForResource@"xml文件名稱" ofType:@"xml"];
 
//讀取文件到內存
 
NSData* data=[NSData dataWithContentsOfFile:path];
 
//通過二進制的數據創建xml轉化器
 
NSXMLParser * parser=[[NSXMLParser alloc]initWithData:data];
 
//設置代理在對應.h文件中實現該代理<NSXMLParserDelegate>
[parser setDelegate:self];
 
//啟動轉換
[parser parse];
 
 
2.XML中常用的幾種行為
 
//文檔轉化開始
 
-(void)parserDidStartDocument:(NSXMLParser)parser
{
 
}
 
//文檔轉換結束
 
-(void)parserDidEndDocument:(NSXMLParser)parser
{
 
}
 
//元素開始
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *) elementName namespaceURI:(NSString *) namespaceURI    qualifiedName:(NSString *) qName attributes:(NSDictionary *) attributeDict
{
 
}
 
//元素結束
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *) elementName namespaceURI:(NSString *) namespaceURI    qualifiedName:(NSString *) qName
{
 
}
 
//發現字符串
-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *) string
{
 
}
 
3.XML解析
對於XML格式為多個元素解析:
XML代碼如下
<students> <student>  <name>張三</name>  <sex>男</sex> <age>21</age> </student></students>
(1)創建該元素的類繼承NSOject(JCStudent)
JCStudent.h中
//姓名
@property (strong,nonatomic) NSString * name;
//性別
@property (strong,nonatomic) NSString * sex;
//年齡
@property (assign,nonatomic) int age;
 
(2)ViewController.h中設置屬性
 
#import "JCStudent.h"
 
@interface ViewController : UIViewController<NSXMLParserDelegate>
{
    NSMutableArray * students;  //學生數組
    BOOL isbz;                //元素開始標志
    NSString * parName;  //字符串內容
    JCStudent * student;  //student類
   
}
(3)在ViewController.m中XML的幾個行為編寫代碼
在viewDidLoad方法中
 
    //初始化動態數組
    students=[[NSMutableArray alloc]initWithCapacity:100];
 
在“文檔轉換開始”方法中
 
    //清空數據
    [students removeAllObjects];
    //字符串內容清空
    parName=@"";
    //標志為NO
    isbz=NO;
 
在“元素開始”方法中
   
    if(isbz==YES){//如果標志為YES
        parName=elementName; //字符串內容賦值
    }
    if([elementName isEqualToString:@"student"]){//如果元素為student
        isbz=YES; //標志改為YES
        student=[[JCStudent alloc]init]; //JCStudent初始化
    }   
 
在“發現字符串”方法中
 
    if(isbz==YES && parName.length>0){//如果標志為YES字符串內容有值
      [student setValue:string forKey:parName];//添加字符串信息到屬性類中
        parName=@"";//字符串內容清空
    }
 
在“元素結束”方法中
 
    if([elementName isEqualToString:@"student"]){//如果元素結束為student
      [students addObject:student];//添加類到動態數組中
        isbz=NO;//標志設置為NO
       
    }
 
在“文檔轉換結束”方法中
 
    //遍歷數組
    for(JCStudent * s in students){
        NSLog(@"name=%@,sex=%@,age=%d",s.name,s.sex,s.age);//控制台輸出
    }
 
對於XML格式為單個元素解析(attributeDict字典):
XML代碼如下
<students> <student name=”張三”  sex=“男”  age=“21” /></students>
(1)創建該元素的類繼承NSOject(JCStudent)
JCStudent.h中
//姓名
@property (strong,nonatomic) NSString * name;
//性別
@property (strong,nonatomic) NSString * sex;
//年齡
@property (assign,nonatomic) int age;
 
(2)ViewController.h中設置屬性
 
#import "JCStudent.h"
 
@interface ViewController : UIViewController<NSXMLParserDelegate>
{
    NSMutableArray * students;  //學生數組
    JCStudent * student;  //student類
   
}
(3)在ViewController.m中XML的幾個行為編寫代碼
在viewDidLoad方法中
 
    //初始化動態數組
    students=[[NSMutableArray alloc]initWithCapacity:100];
 
在“文檔轉換開始”方法中
 
    //清空數據
    [students removeAllObjects];
 
在“元素開始”方法中
 
    if([elementName isEqualToString:@"student"]){//如果開始元素為 student
        student= [[JCStudent alloc]init];//student類初始化
        NSArray * arr=[attributeDict allKeys];//新建數組獲取所有元素的key
        for(NSString * str in arr){//遍歷數組
            [student setValue:[attributeDict objectForKey:str] forKey:str];//添加數組到student類中,Value根據Key獲得
        }
    }
 
 
在“元素結束”方法中
 
    if([elementName isEqualToString:@"student"]){//如果元素結束為student
      [students addObject:student];//添加類到動態數組中
       
    }
 
在“文檔轉換結束”方法中
 
    //遍歷數組
    for(JCStudent * s in students){
        NSLog(@"name=%@,sex=%@,age=%d",s.name,s.sex,s.age);//控制台輸出
    }

Copyright © Linux教程網 All Rights Reserved