ios-XML浅析

本文介绍了XML的基本概念及其与HTML的区别,并详细讲解了XML的两种主要解析方式:SAX和DOM。通过示例代码展示了如何使用SAX进行XML解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值