加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML.JSON数据接口解析

发布时间:2020-12-16 09:37:44 所属栏目:百科 来源:网络整理
导读:XML 解析 1. SAX 解析 : Simple API for XML 利用代理的三个方法来实现逐行解析 创建 : 一个类 SAXXMLPaser SAXXMLPaser.h // 优点 : 数据损坏的时候 可以读取未损坏之前的数据 缺点 数据写错的时候就会直接结束 不继续解析 @interface SAXXMLPaser : NSObje
XML解析
1.SAX解析: Simple API for XML利用代理的三个方法来实现逐行解析
创建:一个类SAXXMLPaser
SAXXMLPaser.h
//优点:数据损坏的时候可以读取未损坏之前的数据
缺点数据写错的时候就会直接结束不继续解析
@interfaceSAXXMLPaser :NSObject<NSXMLParserDelegate]]>//xml SAX解析的代理协议
@property(nonatomic,retain)NSString* currentString;储存每个叶子节点的字符串
NSMutableArray* dataArr;存储所有的学生对象
//开始解析
- (void)startPaser;
SAXXMLPaser.m
- (instancetype)init
{
self= [superinit];
if(self) {
self.dataArr= [NSMutableArrayarray];
}
returnself;
}
- (void)dealloc
{
[dataArrrelease];
[currentStringdealloc];
}
- (void)startPaser
{
//1.获得要解析的数据
NSString* xmlPath = [[NSBundlemainBundle]pathForResource:@"Student"ofType:@"XML"];文件途径
NSData* data = [NSDatadataWithContentsOfFile:xmlPath];
检验是否成功转换成字符串
NSString* str = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
解析使用的类
NSXMLParser* xmlPaser = [[NSXMLParserinitWithData:data];
设置代理
xmlPaser.delegate=self;
//2.开始解析
[xmlPaserparse];
}
#warning当他遇到前面的节点节点头
- (void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName attributes:(NSDictionary*)attributeDict
{
通过判断节点名student来创建学生
if([elementNameisEqualToString:@"student"]) {
Student* student = [[Studentinit];
将对象加入到数组中
[addObject:student];
[studentrelease];
}
}
遇到里面的内容的时候会走这个方法节点内容
- (NSXMLParser*)parser foundCharacters:(NSString*)string
{
存储当前的字符串
currentString= string;
}
当遇到后面那个节点的时候调用方法
-(NSXMLParser*)parser didEndElement:(NSString*)qName
{
Student* student = [lastObject];
将字符串
@"name"]) {
student.name=currentString;
}
else@"sex"]) {
student.sex=currentString;
}
@"number"]) {
student.number= [integerValue];
}
}




1.DOMXML解析节点状解析
(1)首先需要使用到第三方的类 GDataXMLNode.h GDataXMLNode.m
// libxml includes require that the target Header Search Paths contain
//
// /usr/include/libxml2
// and Other Linker Flags contain
// -lxml2
-1. 根据提示搜索 Header Search Paths 添加进去/usr/include/libxml2
-2. 根据提示搜索 Other Linker Flags 添加进去-lxml2
(2) 创建一个类 :DOMXMLPaser
DOMXMLPaser.h
- ( void )startPaser;
@property ( nonatomic , retain ) NSMutableArray * dataArr;
DOMXMLPaser.m
- ( instancetype )init
{
self = [ super init ];
if ( self ) {
self . dataArr = [ NSMutableArray array ];
}
return self ;
}
- ( void )dealloc
{
[ dataArr release ];
[ dealloc ];
}
- ( void )startPaser
{
//1. 获取数据
NSString * domPath = [[ NSBundle mainBundle ] pathForResource : @"Student" ofType : @"XML" ];
NSData * data = [ NSData dataWithContentsOfFile :domPath];
NSString * str = [[ NSString alloc ] initWithData :data encoding : NSUTF8StringEncoding ];
NSLog ( @"%@" ,str);
//2. 解析数据
NSError * error = nil ; // 创建一个错误指针
GDataXMLDocument * document = [[ GDataXMLDocument alloc ] initWithData :data options : GDataXMLDocumentKind error :&error];
if (error != nil ) {
@" 错误信息 : %@" ,error);
}
解析 1. 获得结构的 根节点
GDataXMLElement * rootElement = [document rootElement ];
2. 获得根节点的子节点
根据节点名字获得
NSArray * arr = [rootElement elementsForName : @"student" ];
3. 对数组进行遍历
for ( GDataXMLElement * node in arr) {
对子节点 node 的子节点 name 解析
NSArray * nameNodes = [node @"name" ];
GDataXMLElement * nameNode = [nameNodes lastObject ];
将节点转变为字符串 ( 这个类自己带的 )
NSString * name = [nameNode stringValue ];
NSArray * sexNodes = [node @"sex" ];
GDataXMLElement * sexNode = [sexNodes lastObject ];
NSString * sex = [sexNode stringValue ];
NSArray * numberNodes = [node @"number" ];
GDataXMLElement * numberNode = [numberNodes lastObject ];
NSInteger number = [[numberNode stringValue ] integerValue ];
@"name : %@ sex: %@,number : %d" ,name,sex,number);
}
}

一.JSON解析不需要创建一个类
//1. 获取文件参数1:文件名参数2:文件类型
NSString * jsonPath = [[ NSBundle mainBundle ] pathForResource : @"JSON" ofType : @"txt" ];
NSData * data = [ NSData dataWithContentsOfFile :jsonPath];
NSString * str = [[ NSString alloc ] initWithData :data encoding : NSUTF8StringEncoding ];
NSLog ( @"%@" ,str);
//2. 解析
NSError * error = nil ;
NSMutableArray * arr = [ NSJSONSerialization JSONObjectWithData :data options : NSJSONReadingMutableContainers error :&error];
// 将字典或者字符串 转换为 JSON 类型的
// NSJSONSerialization dataWithJSONObject:<#(id)#> options:<#(NSJSONWritingOptions)#> error:<#(NSError **)#>
for ( NSMutableDictionary * dic in arr) {
Student * student = [[ Student init ];
student. name = [dic objectForKey : @"name" ];
student. sex = [dic @"sex" ];
student. number = [[dic @"number" ] intValue ];
@"%@ %@ %d" ,student. name ,147)">sex ,147)">number );
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读