iOS学习之解析XML数据

来源:互联网 发布:深度卷积网络最新发展 编辑:程序博客网 时间:2024/05/16 08:10
//xml的解析方式2
DOM:
一次性将整个xml文档加载进内存比较适合解析小文件
SAX
从根元素开始 一个一个解析

//解析手段
NSXMLParser :SAX
方式解析 常用(大文件)
libxml2:
C语言默认在iOS 同时支持DOMSAX方式解析
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方式(需要进行以下配置)
*导入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 *elein elements) {
   
//转换为数据模型
    yzModel *model = [[yzModel alloc] init];
    model.name = [ele attributeForName:
@"name"].stringValue;
    [array addObject:model];
}
return
array;

0 0