- (void)xmlParserUpData{
// 利用的是系統的NSXMLParser
// xml分析類
// 以驅動事件進行xml的解析(利用觸發得的代理方法解析)
// 特點: 逐行解析
// 獲取路徑
NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
// 創建要分析的二進制文件
NSData *data = [NSData dataWithContentsOfFile:path];
// 創建分析人
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 驅動事件(設置代理)
parser.delegate = self;
// 開始分析
[parser parse];
[parser release];
}
// 數組(保存model)
// model保存節點中間的 值 (字符串)
// 已經開始分析文件
- (void)parserDidStartDocument:(NSXMLParser *)parser{
self.dataArray = [NSMutableArray array];
NSLog(@"已經開始分析文件");
}
// 已經開始遇到節點
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
// 遇到student節點時初始化student
if ([elementName isEqualToString:@"Student"]) {
self.stu = [[Student alloc] init];
}
// NSLog(@"<%@>",elementName);
// NSLog(@"已經開始遇到節點");
}
// 發現字符串
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
self.str = string;
// NSLog(@"%@",string);
// NSLog(@"發現字符串");
}
// 遇到結束節點
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"name"]) {
self.stu.name = self.str;
}else if ([elementName isEqualToString:@"gender"]){
self.stu.gender = self.str;
}else if ([elementName isEqualToString:@"age"]){
self.stu.age = self.str;
}else if([elementName isEqualToString:@"motto"]){
self.stu.motto = self.str;
}else if([elementName isEqualToString:@"Student"]){
[self.dataArray addObject:self.stu];
[_stu release];
}
// NSLog(@"</%@>",elementName);
// NSLog(@"已經遇到結束節點");
}
// 結束文件分析
- (void)parserDidEndDocument:(NSXMLParser *)parser{
// 這是裝完所有的model
NSLog(@"%@",self.dataArray);
NSLog(@"已經結束文件分析");
}
GDataXMLNode第三方類庫解析(Dom解析)
引入谷歌的第三方類庫GDataXMLNode需要引入系統框架libxml2
1. 工程->General-> Linked FrameWorks and Libraries添加;或者在工程->Build Phases->Link Binary With Libraries下添加
2. 工程->Build Settings->Search Paths->Header Search Paths添加路徑 /usr/include/libxml2
- (void)GDataXMLNodeUpData{
// 獲取文件路徑
NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
// 創建一個data對象
NSData *data = [NSData dataWithContentsOfFile:path];
// 創建一個空的錯誤對象
NSError *error = nil;
// 初始化文件對象
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error];
// 獲取根節點
GDataXMLElement *rootElement = [document rootElement];
// NSLog(@"%@",[rootElement stringValue]);
// 獲取根節點下 student節點
NSArray *elmentArray = [rootElement elementsForName:@"Student"];
// 初始化數組
self.dataArray = [NSMutableArray array];
// 遍歷數組 對每一個sudent節點繼續化整爲零
for (GDataXMLElement *elment in elmentArray) {
// // 取出name節點
// NSArray *nameElmentArray = [elment elementsForName:@"name"];
//
// // 從數組中取出name節點的值
// GDataXMLElement *nameElement = nameElmentArray[0];
//
// // 把節點中的值取出來
// NSString *name = [nameElement stringValue];
Student *stu = [[Student alloc] init];
NSString *name = [self dataToString:elment elementName:@"name"];
stu.name = name;
NSString *age = [self dataToString:elment elementName:@"age"];
stu.age = age;
NSString *gender = [self dataToString:elment elementName:@"gender"];
stu.gender = gender;
NSString *motto = [self dataToString:elment elementName:@"motto"];
stu.motto = motto;
[self.dataArray addObject:stu];
// 釋放 ++++++++++++++++
[stu release];
}
}
// 1.找報紅的對象(報紅方法中沒有,需要外界傳遞)
// 2.找可變對象(例如name等 需要外界傳遞)
// 3.選好返回值
- (NSString *)dataToString:(GDataXMLElement *)element elementName:(NSString *)elementName{
// 取出name節點
NSArray *nameElmentArray = [element elementsForName:elementName];
// 從數組中取出name節點的值
GDataXMLElement *nameElement = nameElmentArray[0];
// 把節點中的值取出來
NSString *name = [nameElement stringValue];
return name;
}