//xml的解析方式2种
DOM:一次性将整个xml文档加载进内存比较适合解析小文件
SAX 从根元素开始 一个一个解析
//解析手段
NSXMLParser :SAX 方式解析 常用(大文件)
libxml2:纯C语言默认在iOS中 同时支持DOM和SAX方式解析
GDataXML:DOM方式 常用(小文件)(基于libxml2)
DOM:一次性将整个xml文档加载进内存比较适合解析小文件
SAX 从根元素开始 一个一个解析
//解析手段
NSXMLParser :SAX 方式解析 常用(大文件)
libxml2:纯C语言默认在iOS中 同时支持DOM和SAX方式解析
GDataXML:DOM方式 常用(小文件)(基于libxml2)
1.SAX从根元素开始 一个一个解析
//创建解析器
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
//设置代理监听解析过程
parser.delegate = self;
//开始解析 ----调用代理方法
[parser parse];//同步解析在整个方法中卡住 (解析完毕才会返回)
returnself.array;
#pragma mark --NSXMLParserDelegate XML解析代理
//开始解析文档时调用
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
// NSLog(@"parserDidStartDocument");
}
//结束解析文档时调用
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
// NSLog(@"parserDidEndDocument");
//解析完所有数据刷新表格
可以在这里刷新表格
}
//解析到一个元素开头时调用
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"didStartElement---%@",elementName);
//解析的时xml标签中的属性
NSLog(@"%@",attributeDict);
}
//解析到一个元素结尾时调用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// NSLog(@"didEndElement----%@",elementName);
}
GDataXML:DOM方式(需要进行以下配置)
//创建解析器
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
//设置代理监听解析过程
parser.delegate = self;
//开始解析 ----调用代理方法
[parser parse];//同步解析在整个方法中卡住 (解析完毕才会返回)
returnself.array;
#pragma mark --NSXMLParserDelegate XML解析代理
//开始解析文档时调用
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
// NSLog(@"parserDidStartDocument");
}
//结束解析文档时调用
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
// NSLog(@"parserDidEndDocument");
//解析完所有数据刷新表格
可以在这里刷新表格
}
//解析到一个元素开头时调用
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"didStartElement---%@",elementName);
//解析的时xml标签中的属性
NSLog(@"%@",attributeDict);
}
//解析到一个元素结尾时调用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// NSLog(@"didEndElement----%@",elementName);
}
GDataXML:DOM方式(需要进行以下配置)
*导入libxml2库(general中)
*设置libxml2的头文件搜索路径(/usr/include/libxml2)
在Build settings中搜索serach 找到 header search paths -----》双击添加路径
*告诉编译器使用非arc编译
build phases --》compile source ----》找到相应文件添加compiler flags (-fno-objc-arc)
*告诉系统加载-libxml2库
build settings -->搜索other linker --》在other linker flags 中添加 -lxml2
1》导入GDataXMLNode的文件(谷歌编写的)
GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options:0error:nil];
//获取根元素
GDataXMLElement *root = doc.rootElement;
//获取元素 支持Xpath
NSArray *elements = [root elementsForName:@""];
NSMutableArray *array = [NSMutableArray array];
for(GDataXMLElement *ele in elements) {
//转换为数据模型
yzModel *model = [[yzModel alloc] init];
model.name = [ele attributeForName:@"name"].stringValue;
[array addObject:model];
}
return array;
*告诉编译器使用非arc编译
build phases --》compile source ----》找到相应文件添加compiler flags (-fno-objc-arc)
*告诉系统加载-libxml2库
build settings -->搜索other linker --》在other linker flags 中添加 -lxml2
1》导入GDataXMLNode的文件(谷歌编写的)
GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options:0error:nil];
//获取根元素
GDataXMLElement *root = doc.rootElement;
//获取元素 支持Xpath
NSArray *elements = [root elementsForName:@""];
NSMutableArray *array = [NSMutableArray array];
for(GDataXMLElement *ele in elements) {
//转换为数据模型
yzModel *model = [[yzModel alloc] init];
model.name = [ele attributeForName:@"name"].stringValue;
[array addObject:model];
}
return array;