XML和son的数据解析

本文详细介绍了如何使用Objective-C语言解析XML文件,包括设置解析方法、数据存储、协议响应和DOM实现等步骤,旨在帮助开发者高效处理XML数据。
部署运行你感兴趣的模型镜像

XML的数据解析

1.先设置一个开始解析的方法   2.把处理好的数据学生放到数组里,然后直接使用数组就可以了

// 先设置一个开始解析的方法
- (void)startParser;
// 把处理好的数据学生,放到数组里,然后直接使用数组就可以
@property(nonatomic, retain)NSMutableArray *stuArr;

2.开始解析的方法----->1.先找到文件路径 2.把路径对应的文件转换成NSData  3.创建一个XML文件  4.设置代理人  5.开始解析

- (void)startParser{
    // 先找到文件的路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    // 把路径对应的文件转换成NSData
    NSData *data = [NSData dataWithContentsOfFile:path];
    // 创建一个xml解析工具
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
    // 设置代理人
    parser.delegate = self;
    // 开始解析
    [parser parse];

}

3.协议方法,开始解析,执行协议方法didse 1.根据不同的节点名,进行不同的操作   2.小的student里创建一个学生对象

#pragma mark 开始解析,执行协议方法
// didsE
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{
    // 根据不同的节点名,进行不同的操作
    if ([elementName isEqualToString:@"Student"]) {
        self.stuArr = [NSMutableArray array];
        
    } else if ([elementName isEqualToString:@"student"]){
        // 小的student, 创建一个学生对象
        Student *stu = [[Student alloc] init];
        [self.stuArr addObject:stu];
    }
}

4.通过这个协议方法能找到标签之间的内容,但是标签之间如果夹的还是标签,则没有任何内容  这个方法只要找到节点内容就会触发

#pragma mark 通过这个协议方法能找到标签之间的内容,但是标签之间如果夹的还是标签,则没有任何内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    // 这个方法只要找到节点内容就会触发
    self.tempStr = string;
}

5.当节点结束的时候,就会执行这个方法  先找到没有设置好的学生,(数组的最后一个) 用KVC的方法赋值

#pragma mark 当节点结束的时候,就会执行这个方法
// 第一个方法
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    // 先找到没有设置好的学生
    Student *stu = [self.stuArr lastObject];
    // KVC方法,赋值
    [stu setValue:self.tempStr forKey:elementName];
}

DOM(需要用三方)  前两部和parser一样(可以写成加号方法)

- (void)startDom;

@property(nonatomic, retain)NSMutableArray *stuArr;

// 加号方法
+ (NSMutableArray *)startXMLDom;

先获取路径,

然后创建对象(创建对象的三个参数,参数一:需要处理数据  参数二:没有0就行 参数三:错误信息)  

先到数据的根节点  根据根节点,找到所有的student的节点

- (void)startDom{
    // 先获取路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    // 创建对象
    // 参数一:需要处理数据
    // 参数二:没什么用, 0就行
    // 参数三:错误信息
    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
    
    // 找到数据的根节点
    GDataXMLElement *rootRlement = [document rootElement];
    // 根据根节点,找到所有的student的节点
    NSArray *arr = [rootRlement elementsForName:@"student"];
    // 先对属性数组进行初始化
    self.stuArr = [NSMutableArray array];
    // 遍历数组
    for (NSInteger i = 0; i < arr.count; i++) {
        // 创建一个学生对象
        Student *stu = [[Student alloc] init];
        // 找到每一个student节点对应的内容
        GDataXMLElement *stuElement = arr[i];
        // 根据节点名,对student节点里的内容进行获取
        GDataXMLElement *name = [[stuElement elementsForName:@"name"] lastObject];
        // 对学生姓名进行赋值
        stu.name = [name stringValue];
        [self.stuArr addObject:stu];
        
        
        
    }

}

+ (NSMutableArray *)startXMLDom{
    // 先获取路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
    GDataXMLElement *rootRlement = [document rootElement];
    NSArray *arr = [rootRlement elementsForName:@"student"];
    NSMutableArray *stuArr = [NSMutableArray array];
    for (NSInteger i = 0; i < arr.count; i++) {
        Student *stu = [[Student alloc] init];
        GDataXMLElement *stuElement = arr[i];
        GDataXMLElement *name = [[stuElement elementsForName:@"name"] lastObject];
        stu.name  = [name stringValue];
        [stuArr addObject:stu];
    }
    return stuArr;
}










































您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值