Json和XML都属于字符串,用于跨平台,前面总结了下Json,下面看下XML。

XML定义这些百度比我说的清,不再啰嗦,直接代码,我喜欢把东西都放进注释。

一、首先看下要解析的XML内容

<?xml version="1.0" encoding="utf-8"?>
<Users><User id="1"><name>Tom</name><age>20</age></User><User id="2"><name id = "222">John</name><age>33</age></User><User><name id = "333">Eric</name><age>43</age></User><User><name id = "444">Tony</name><age>54</age></User>
</Users>

二、在项目中添加Person类为其添加属性

//
//  Person.h
//  XmlDemo
//
//  Created by City--Online on 15/4/29.
//  Copyright (c) 2015年 CYW. All rights reserved.
//#import <Foundation/Foundation.h>@interface Person : NSObject@property(nonatomic,strong)NSString *Pid;@property(nonatomic,strong)NSString *Name;@property(nonatomic,assign)int Age;
@end

三、用IOS原生框架来解析XML,注意实现代理

//
//  ViewController.m
//  XmlDemo
//
//  Created by City--Online on 15/4/29.
//  Copyright (c) 2015年 CYW. All rights reserved.
//#import "ViewController.h"
#import "Person.h"@interface ViewController () <NSXMLParserDelegate>
@property (nonatomic, strong) NSMutableArray *personArray;
@property (nonatomic, strong) NSMutableString *element;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//    XML的解析方式有2种
//    DOM:一次性将整个XML文档加载进内存,比较适合解析小文件 文档驱动
//    SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件 事件驱动//IOS自带的属于SAX事件驱动的解析方式
//    就是一个事物模型解析,从头开始读取文档然后根据读取到的头标签,读完头标签后,理论上是读取标签值,然后读取后遇到结束标签等NSString *path=[[NSBundle mainBundle]pathForResource:@"user" ofType:@"xml"];NSURL *url=[[NSURL alloc]initFileURLWithPath:path];//实例化NSXMLParser *parser=[[NSXMLParser alloc]initWithContentsOfURL:url];//设置代理parser.delegate=self;//开始解析[parser parse];}
// step1 开始解析
-(void)parserDidStartDocument:(NSXMLParser *)parser
{self.personArray = [[NSMutableArray alloc] initWithCapacity:0];self.element = [[NSMutableString alloc] init];
}//step2 开始解析元素 获取头标签的信息<>里面的属性、名字
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{if ([elementName isEqualToString:@"Users"]) {NSLog(@"进入<Users>");}if ([elementName isEqualToString:@"User"]) {NSLog(@"进入<User>");Person *user = [[Person alloc] init];[_personArray addObject:user];}if ([elementName isEqualToString:@"name"]) {NSLog(@"进入<name>");Person *user = [_personArray objectAtIndex:[_personArray count] -1];user.Pid = [attributeDict objectForKey:@"id"];}if ([elementName isEqualToString:@"age"]) {NSLog(@"进入<age>");}}
//step3 获得首尾标签间 > < 的内容
//此处分几种情况:
//1.当标签间内容为“”,如果</></>(如图</age></User></Users>)则进入step4,否则进入step2
//2.当标签间内容不为“”,则进入step4
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{NSLog(@"%@", string);//获取文本节点中的数据,因为下面的方法要保存这里获取的数据,所以要定义一个全局变量(可修改的字符串)//这里要赋值为空,目的是为了清空上一次的赋值[_element setString:@""];[_element appendString:string];//string是获取到的文本节点的值,只要是文本节点都会获取(包括换行),然后到下个方法中进行判断区分
}
//step4 标签解析结束</>
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementNamenamespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
//    NSLog(@"%@", elementName);NSString *str=[[NSString alloc] initWithString:_element];if ([elementName isEqualToString:@"Users"]) {NSLog(@"</Users>= %@",str);}if ([elementName isEqualToString:@"name"]) {NSLog(@"</name>=%@",str);Person *user = [_personArray objectAtIndex:[_personArray count] -1];user.Name = str;}if ([elementName isEqualToString:@"age"]) {NSLog(@"</age>=%@",str);Person *user = [_personArray objectAtIndex:[_personArray count] -1];user.age = (int)[str integerValue];}if ([elementName isEqualToString:@"User"]) {NSLog(@"</User>=%@ ",str);}
}
//step5 解析结束
-(void)parserDidEndDocument:(NSXMLParser *)parser
{for (Person *p in self.personArray) {NSLog(@"%@  %d %@",p.Name,p.Age,p.Pid);}
}
//解析报错
-(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{NSLog(@"解析有误 Error:%@",parseError);}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}@end

四、运行结果(显示的内容过长,减少了两个User)

在这里要感谢陈高oliver和袁伟(伟哥)

网络之XML解析-原生相关推荐

  1. iOS -数据库网络之xml解析之远程解析XML

    1.IOS中XML文件获取    //设置远程访问地址     NSURL *url=[NSURL URLWithString:@""];       //创建动态URL请求,并初 ...

  2. 简易XML解析器(C++)

    XML在web的应用是很广泛的,但对于普通c++程序员恐怕用得不多,xml灵活的格式使得一些设置文件描述变得很容易,但是应用他总是困难的,网络上XML解析器庞大的吓人,如果为了解析很简单的XML也要学 ...

  3. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. 网络数据的XML解析

    XML解析一般分两种模式SAX和DOM,事件和文档.具体解析google去吧,有详细.不过看了下面的两个例子,一般就了解了. 一:XML解析之SAX解析,以及对NSXMLParser的应用. sax解 ...

  5. android XML解析详解(封装好的工具类)

    常见的XML解析有哪几种? DOM解析; PULL解析;(android自带的解析XML的技术) JDOM解析; SAX解析; DOM4J PULL解析示例代码: <1> 我们要解析的XM ...

  6. OC中JSON解析与XML解析

    文章目录 ###JSON JSON是一种轻量级的数据格式,一般用于数据交互: 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外). JSON的格式很像OC中的字典和数组,标准 ...

  7. Java基础-xml解析

    XML XML 概述 Exendsible Markup Language(XML)可扩展标记语言 用途: 数据存储,小型数据库,存在一定CRUD操作可行性 网络数据的传输 JavaWEB项目配置文件 ...

  8. XML解析、JSON解析入门

    引言 NOKIA 有句著名的广告语:"科技以人为本".任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个 ...

  9. SugarSync网盘之XML解析

    iOS的XML解析 刚在应用里支持了SugarSync网盘.其实也是第一次听说这个网盘,不过在国外貌似还蛮有名,这些都不是重点,重点是借此来总结一下iOS的XML解析.Xml想必也不陌生了,但是在iO ...

最新文章

  1. 特朗普推文的文本分析
  2. php接口数据安全解决方案(一)
  3. KindEditorckplayer的简单结合
  4. java map赋值给model_Map,Model,ModelMap使用方法
  5. 记-安装pillow
  6. 13.multi-term-vector请求
  7. SELinux基本概念及基本配置
  8. 小程序 delete_程序员崩溃的43个瞬间!搞工科的是不是都这样?
  9. python的scale方法的变体以及使用_Python with用法实例
  10. 【clickhose】clickhouse-client 无法登录 could not determine local time zone custom time zone file used
  11. mysql语句1=1_mysql - “where 1 = 1”语句
  12. 神经网络API、Kotlin支持,那些你必须了解的Android 8.1预览版和Android Studio 3.0新特性
  13. 多功能工具箱微信小程序源码下载-操作简单
  14. GHOST XP SP3 遐想网络 纯净驱动预览版 2.0
  15. linux格式化分区进程,Linux 硬盘格式化、分区、挂载、卸载、删除分区,Linux重新调整分区...
  16. 电脑开机没反应怎么办?
  17. php 云片网对接,云片网络短信发送 PHP SDK 奉上
  18. 计算机网络知识之1M宽带下载速度多少?
  19. 正则校验18位身份证号,拿走即用!
  20. 《linux核心应用命令速查》连载五:atq:显示目前使用at命令后待执行的命令队列...

热门文章

  1. Modelsim仿真查看内部信号
  2. Vs code如何快速生成Verilog例化模板
  3. Parabola(抛物线)
  4. 【 C 】高级字符串查找之 strspn 和 strcspn 的思考
  5. C# 8新提案让泛型Attribute成为现实
  6. React学习实例总结,包含yeoman安装、webpack构建
  7. SQL关键字转换大写核心算法实现
  8. springmvc:BeanNameViewResolver访问内部资源视图对象和访问外部资源视图对象
  9. C#零基础入门04:打老鼠初级之枚举、重构、事件处理器
  10. 【循序渐进学Python】1. Python基础知识