iOS学习之解析XML数据

本文详细介绍了XML解析的两种方式:DOM和SAX,并通过NSXMLParser展示了如何使用SAX进行解析。此外,还介绍了GDataXML作为DOM方式解析XML的工具,包括配置步骤和使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//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 *ele in elements) {
   
//转换为数据模型
    yzModel *model = [[yzModel alloc] init];
    model.name = [ele attributeForName:
@"name"].stringValue;
    [array addObject:model];
}
return
array;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值