ios-XML浅析

什么是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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值