XML_DOM和XML_SAX数据解析(初学)

方法一:XML_DOMXML_DOM数据解析

 1 //DOM树状解析  一个个节点解析
 2     
 3     /*
 4      GData的抓准备工作
 5      1.导入动态库: libxml2.dylib
 6      2.在buid setting 里面搜索 header search paths ,添加//usr/include/libxm2
 7      3.在buid setting 里面搜索 other linker flags ,添加 -lxml2
 8      4.GData 和 JSONKit 都是MRC下的,如果想在ARC下使用 ,加上一句修饰 -font object ******
 9      */
10     
11     
12     // XML DOM解析
13     
14     //1.获取XML路径
15     
16     NSString *fielPath = [[NSBundle mainBundle]pathForResource:@"Student.xml" ofType:nil];
17     
18     //2.将XML文件转成字符串
19     NSError *error = nil ;
20     NSString *xmlString = [[NSString alloc]initWithContentsOfFile:fielPath encoding:NSUTF8StringEncoding error:&error];
21     
22     //3.讲XML字符串转化为XML类型的数据
23     GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithXMLString:xmlString options:0 error:&error];
24     
25     //4.获取根节点
26     GDataXMLElement *rootElement = [document rootElement];
27     
28     //5.根据标签节点名字来取(一层层取)
29     NSArray *studentArray = [rootElement elementsForName:@"student"];
30     
31     self.dataArray = [NSMutableArray array];
32     
33     for (int i = 0; i < studentArray.count; i ++) {
34         
35         Student *student = [[Student alloc]init];
36         
37         GDataXMLElement *element = studentArray[i];
38         
39         NSArray *nameArray = [element elementsForName:@"name"];
40         
41         student.name = [nameArray[0] stringValue];
42         
43         NSArray *ageArray = [element elementsForName:@"age"];
44         student.age = [ageArray[0] stringValue];
45         
46         NSArray *sexArray = [element elementsForName:@"sex"];
47         student.sex = [sexArray[0] stringValue];
48         
49         [self.dataArray addObject:student];
50     }
51     
52     
53     

方法二:XML_SAX数据解析

  1 #import "MainViewController.h"
  2 #import "Student.h"
  3 @interface MainViewController ()<NSXMLParserDelegate>
  4 
  5 @property (nonatomic,retain) NSMutableArray *dataArray ;
  6 
  7 //记录当前解析的节点标签的名字
  8 @property (nonatomic,retain) NSString *currenElementName ;
  9 
 10 @property (nonatomic,retain) Student *student ;
 11 
 12 @end
 13 
 14 @implementation MainViewController
 15 
 16 -(void)dealloc{
 17     [_currenElementName release];
 18     [_student release];
 19     [_dataArray release];
 20     [super dealloc];
 21 }
 22 
 23 - (void)viewDidLoad {
 24     [super viewDidLoad];
 25     // Do any additional setup after loading the view.
 26     
 27     
 28     //SAX
 29     
 30     //1.获取路径
 31     
 32     NSString *fielPath = [[NSBundle mainBundle]pathForResource:@"Student.xml" ofType:nil];
 33     
 34     //2.转化为xml为二进制数据
 35     NSData *data = [NSData dataWithContentsOfFile:fielPath];
 36     
 37     //3.利用系统的SAX 解析
 38     NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
 39     
 40     //4.指定代理  使用代理方法
 41     parser.delegate = self ;
 42     
 43     self.dataArray = [NSMutableArray array];
 44     
 45     //开始解析数据
 46     [parser parse];
 47     
 48     
 49     
 50     
 51     
 52 }
 53 
 54 
 55 -(void)parserDidStartDocument:(NSXMLParser *)parser{
 56     
 57     NSLog(@"开始解析");
 58     
 59 //    self.currenElementName = nil ;
 60 }
 61 
 62 
 63 
 64 //开始解析某个标签
 65 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
 66     
 67     NSLog(@"开始解析标签%@",elementName);
 68     
 69     self.currenElementName = elementName ;
 70     
 71     
 72     
 73 }
 74 
 75 //取值方法
 76 -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
 77 {
 78     
 79     NSLog(@"取到的值:%@",string);
 80     
 81     if ([self.currenElementName isEqualToString:@"student"]) {
 82         self.student = [[Student alloc]init];
 83         
 84     }
 85     
 86     if ([self.currenElementName isEqualToString:@"name"] &&
 87         self.student.name == nil) {
 88         self.student.name = string ;
 89     }
 90     
 91     if ([self.currenElementName isEqualToString:@"age"] &&
 92         self.student.age == nil) {
 93         self.student.age = string ;
 94     }
 95     
 96     if ([self.currenElementName isEqualToString:@"sex"] &&
 97         self.student.sex == nil) {
 98         self.student.sex = string ;
 99     }
100     
101     
102 }
103 
104 //结束某个标签
105 -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
106 {
107     if ([elementName isEqualToString:@"student"]) {
108         
109          [self.dataArray addObject:self.student];
110         
111         self.student = nil ;
112     }
113     
114     NSLog(@"结束节点 %@",elementName);
115     
116 }
117 
118 //结束整个文件解析
119 -(void)parserDidEndDocument:(NSXMLParser *)parser{
120     
121     NSLog(@"解析完成");
122 }

 

posted @ 2015-10-14 21:00  YX祥  阅读(176)  评论(0编辑  收藏  举报