标签:
小知识:
关于翻译:从事先约定好的数据结构中获取数据
解析数据分三方:提供方, 解析方, 格式
ios中分别代表:服务器, 程序员, XML、JSON
实际开发中,程序员只需要从服务器获取数据,按照格式解析数据即可。
一、XML(可扩展标记语言)的解析方式:SAX 和DOM解析。其结构为:
二、SAX解析步骤:
// 获取路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType];
// 从文件中读取二进制流
NSData *data = [NSData dataWithContentsOfFile:filePath];
// 创建XMLParser对象
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 设置delegate
parser.delegate = self;
// 开始解析
[parser parse];
代理的几个重要方法,在此可以提取自己想要的数据
// 遇到开标签
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
}
// 取值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
}
// 遇到关标签
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
}
三、 DOM解析(需要导入第三方类库,此类库由Google提供,后面会有附加,并且导入后要做一些修改,修改的内容 .h 文件的30~36行中有详细说明)
// 获取文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType];
// 获取文件内容
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// 转化为XMLDocument(此时文档已经解析完毕,并且转化为XMLDoucment存储,同时文档的树形结构已清晰明了)
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithXMLString:str options:0 error:nil];
// 方式一、 不断找子节点来获取数据
// 1,获取根节点
GDataXMLElement *rootElement = document.rootElement;
// 2,获取子节点(通过children可以逐级向下找)
NSArray *childElement = rootElement.children;
方式二、 使用elementForName:方法,给出一个节点的名字找到节点
1,获取根节点
GDataXMLElement *rootElement = document.rootElement;
2,通过elementForName:找
NSArray *arr = [rootElement elementsForName:name];
3, 从数组中找到需要的节点
GDataXMLElement *element = arr[1];
4,通过elementForName:找
NSArray *arr1 = [element elementsForName:@"sex"];
方式三、通过绝对路径查找对应的数据
NSArray *nodes = [document nodesForXPath:path error:nil];
// 方式四、通过相对路径查找
NSArray *nodes = [document nodesForXPath:@"//sex" error:nil];
四、两种解析方式的优缺点
SAX解析为逐行解析数据
优点:1,逐行解析,不会一次性读入整个文档,减少内存消耗
2, 文件损坏,对解析没有影响
缺点:逐行解析,没有办法获取文件的层级结构,获取比较繁琐
DOM解析:一次性读入整个文档进行解析(原理:开标签入栈,关标签出栈)
优点:1,一次性读入整个文件时,会将数据的树形结构记录下来,有利于程序员分析数据
2, XML文件一旦出错立即发现
缺点:由于一次性读入整个文件,内存消耗较大。同时文件出错时不能解析文件
标签:
原文地址:http://www.cnblogs.com/qiushifalife/p/4802579.html