ios-XML浅析
来源:互联网 发布:验机软件 编辑:程序博客网 时间:2024/06/07 01:23
什么是XML?
XML全称Extentsible Markup Language 又叫可扩展标记语言
HTML是超文本标记语言,什么是标记语言通俗易懂点就是有<tag></tag>这个的就是可标记语言
XML尖括号中的内容是可以随便写的,所有XML可扩展,而HTML中的尖括号是预定义的
XML和HTML很类似,HTML的作用就是显示数据,XML的目的是存储和传输数据。
XML文档一般由三部分组成,文档声明,元素,还有属性。
文档声明可以这么写<?xml version="1.0" ?>
也可以这么写<?xml version="1.0" encoding="UTF-8" ?> encoding属性就是说明了文档的字符编码
一个元素包括了开始标签和结束的标签,可以这么写
<name>哈哈</name>
<name></name>
<name/>
一个元素可以嵌套着若干个元素,但是不能出现交叉嵌套的情况
XML的所有的空格和换行都会当做具体的内容处理
比如说<name>哈哈</name>
和<name>
哈哈
</name>是不一样的
一个元素可以有多个属性
XML是之前各种应用之间传输数据最常用的格式
XML中有且只有一个根节点
XML可以这么写
<!-- 注释 --><Class className="计算机"><Student name="hh" sex="boy" /></Class>
XML的解析方式一种是SAX,速度快,只读,加载一部分,解析一部分,基于事件驱动
是指一种基于回调(callback)机制的程序运行方法
SAX的解析步骤是
加载xml数据
找开始节点(包括节点的属性)
找节点之间的内容
找结束节点
直到找到最后一个节点,解析结束。
总结来说就是1、开始文档 2、开始节点 3、发现节点的内容 4、结束节点 5、解析结束
SAX解析方式代码如下
#import "ViewController.h"@interface ViewController ()<NSXMLParserDelegate>@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self loadXML];}-(void)loadXML{ NSURL * url=[NSURL URLWithString:@"http://127.0.0.1/File.xml"]; NSURLRequest * request=[NSURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { if(connectionError) { NSLog(@"连接错误 %@",connectionError); return; } //获取服务器的响应体,如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是:客户端已经执行了GET,但文件未变化。然后直接从缓存中读取,状态码为200表示成功处理了请求,404 服务器找不到请求的网页 //connection是判断是否和服务器连接成功,是发送数据之前的事情 //响应头中的Content-Type代表的是服务器告诉浏览器我发给你的是什么文件 //这里的response实际上是NSURLResponse的子类,所以我们强制转换下 NSHTTPURLResponse * httpResponse=(NSHTTPURLResponse *)response; //判断下status code的编码 if(httpResponse.statusCode == 200 || httpResponse.statusCode == 304) { //解析xml数据 NSXMLParser * parser=[[NSXMLParser alloc]initWithData:data]; //设置代理 parser.delegate=self; //开始执行代理的方法,代理的方法中开始解析,是同步执行的 [parser parse]; } else { NSLog(@"服务器内部错误"); } }];}//代理方法的执行的线程是在和设置代理属性的线程是同一个线程//1、开始解析文档-(void)parserDidStartDocument:(NSXMLParser *)parser{ NSLog(@"开始解析文档");}//2、找开始节点-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ //elementName 节点的名称 //attributeDict 标签的属性 NSLog(@"找开始节点 %@ %@",elementName,attributeDict);}//3、找节点之间的内容-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ NSLog(@"找节点之间的内容 %@",string);}//4、找结束节点-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ //elementName 节点的名称 NSLog(@"找结束节点 %@",elementName);}//5、结束解析文档-(void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"结束解析文档");}//6、解析出错-(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ NSLog(@"解析出错");}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end还有一种解析方式是DOM方式的解析全称Document Object Model
DOM-又叫文档对象模型,就是把整个文档视为对象,解析文档前,全部加载,转化为树模型
一次性把XML全部加载到内存中,内存消耗大
SAX方法只能读取XML,DOM可以修改、添加和删除某个节点
ios默认不支持DOM解析
DOM适合读写比较小的XML文件
DOM解析我们可以用一个第三方框架GData
- ios-XML浅析
- XML浅析
- XML浅析
- IOS 网络浅析-(五 xml解析)
- 【XML】——XML浅析
- dimen.xml浅析
- XML vs JSON 浅析
- 浅析Java中的XML
- DOM解析XML浅析
- 浅析java XML文件
- 浅析iOS界面设计方法
- 浅析iOS界面设计方法
- iOS Block -浅析
- 浅析IOS中的MVC
- iOS动画浅析
- iOS Block -浅析
- iOS动画浅析-CATransition
- IOS代理浅析
- 什么是包?
- lintcode--格雷编码
- go语言字符串格式化
- 最近想着提升自己--软件著作权
- 职场“中等收入陷阱”:你的薪水为什么不再增加?
- ios-XML浅析
- C语言中动态分配内存
- java生成二维码并解析二维码(QRCode方式)
- 错误:the input device is not a TTY
- java ==和equals、equals和hashCode的区别
- TCP四次挥手
- 测试一下什么问题
- springboot整合activeMQ
- java基础学习总结——面向对象2