您的位置:首页 > 移动开发 > IOS开发

iOS开发之XML解析

2016-03-30 21:13 627 查看


有如上XML文件
/**
* XML解析
分为两种方式:SAX解析和DOM解析。
SAX解析:逐行进行解析数据
优点:1.逐行解析,不会一次性读入文档,减少内存消耗。
2. 因为是逐行解析,XML文件损坏对其没有影响。
缺点:没办法获取文件的层级关系,对程序员而言获取数据比较麻烦。
*/
//// 1. 获取文件路径
// NSString * filePath = [[NSBundle mainBundle]pathForResource:@"Teacher" ofType:@"xml"];
//
//// 2.从文件中读取二进制流
// NSData * data = [NSData dataWithContentsOfFile:filePath];
//
//// 3.创建XMLParser对象
// NSXMLParser * parser = [[NSXMLParser alloc]initWithData:data];
//// 4.设置代理
// parser.delegate = self;
//// 5.开始解析
// [parser parse];

#pragma mark- NSXMLParserDelegate

//遇到开标签得方法

-(void)parser:(NSXMLParser *)parserdidStartElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qNameattributes:(NSDictionary*)attributeDict

{

NSLog(@"start-------%@",elementName);

}

//取值

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

{

NSLog(@"string------%@",string);

}

//遇到关标签

-(void)parser:(NSXMLParser *)parserdidEndElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName

{

NSLog(@"end---------%@",elementName);



**************************************

/**
* DOM解析:一次性读入整个文档进行解析。
优点:1.一次性将整个文档读入时,会将数据的解析结构记录下来,有利于程序员分析数据。
2 .XML文件出错会立即发现
缺点:由于一次性读入整个文档,对内存消耗比较大。同时优点也是缺点即XML文件出现错误就不能解析数据
DOM原理是:遇到开标签进栈,遇到关标签出栈
借助GDataXMLNode来解析
*/
// 1.获取文件路径
NSString * filePath = [[NSBundlemainBundle]pathForResource:@"Teacher.xml"ofType:nil];
// 2.获取文件内容
NSString * str = [NSStringstringWithContentsOfFile:filePathencoding:(NSUTF8StringEncoding)error:nil];
// 3.转换为XMLDocument。(当执行完这一步时,整个文档已经被解析完毕,并且转换为XMLDoucment进行存储。同时文档对应的树形也已经清晰)
GDataXMLDocument *document = [[GDataXMLDocumentalloc]initWithXMLString:stroptions:0error:nil];
//// 第一种方式:不断地找子节点来获取数据
//// 1.获取根节点
// GDataXMLElement * rootElement = document.rootElement;
//// NSLog(@"%@",rootElement);
//// 2.获取根节点的子节点
// NSArray * array = [rootElement children];
//// NSLog(@"%@",array);
//// 3.获取对应的所有子节点
// NSArray * arrayElement = [array[1] children];
//// NSLog(@"%@",arrayElement);
//// 4.获取sex节点
// NSString * string = [arrayElement[1] stringValue];
// NSLog(@"%@",string);

// 第二种方式:使用elementForName:方法,给出一个节点对应的名字获取节点对应的数据

// //1.获取根节点
// GDataXMLElement * rootElement = [document rootElement];
//// 2.通过elementForName获取数据
// NSArray * array = [rootElement elementsForName:@"teacher"];
//// 3.从数组中找到对应的节点
// GDataXMLElement * shengchenElement = array[1];
//// 4.通过elementForName:方法获取sex
// NSArray * sexArray = [shengchenElement elementsForName:@"sex"];
// NSString * string = [sexArray[0] stringValue ];
// NSLog(@"%@",string);
//

//// 第三种方式;通过绝对路径获取对应的数据
// NSArray * nodeArray = [ document nodesForXPath:@"teachers/teacher/sex" error:nil];
//// NSLog(@"%@",nodeArray);
// NSString * string = [nodeArray[1] stringValue];
// NSLog(@"%@",string);

// 第四种方式:通过相对路径查找数据(sex都会找到无论在哪个节点)
// NSArray * nodesArr = [document nodesForXPath:@"//sex" error:nil];
// NSArray * nodesArr = [document nodesForXPath:@"///teacher/sex" error:nil];
// NSLog(@"%@",[nodesArr[1] stringValue]);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: