XML.JSON数据接口解析

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 );
}

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念