XML数据解析

// 新建一个空文件,后缀为.xml

<Student>
    <student>
        <name>张三</name>
        <age>22</age>
        <sex></sex>
        <hobby></hobby>
    </student>
    <student>
        <name>李四</name>
        <age>22</age>
        <sex></sex>
        <hobby>上网</hobby>
    </student>
    <student>
        <name>王二麻子</name>
        <age>21</age>
        <sex></sex>
        <hobby>学习</hobby>
    </student>
    <student>
        <name>赵钱</name>
        <age>20</age>
        <sex></sex>
        <hobby>没爱好</hobby>
    </student>
</Student>

// 创建一对ParserXML文件,继承与NSObject

***Parser.h***

// 先签订NSMXLParserDelegate协议
// 用一条属性,数组来装所有解析好的model对象
@property(nonatomic, retain)NSMutableArray *array;

// 用一条字符串属性,来保存节点内容
@property (nonatomic, copy)NSString *str;

// 给一个开始解析的方法
- (void)startParser;
***ParserXMl.m***

// 实现解析方法
- (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];
}

// 开始执行协议方法

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    // 只要一碰到节点,系统就自动走这个方法
    if ([elementName isEqualToString:@"Student"]) {
        // 碰到根节点,需对数组进行初始化
        self.array = [NSMutableArray array];
    } else if ([elementName isEqualToString:@"student"]) {
        // 碰到二级节点时,意味着这是一个新对象,需创建一个新对象放进数组中
        Student *stu = [[Student alloc] init];
        [self.array addObject:stu];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    // 找到节点内容时调用,用一条属性来保存节点内容
    self.str = string;
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    // 到节点结束会走这个方法

    Student *stu = [self.array lastObject];
    // 通过KVC进行赋值
    [stu setValue:self.str forKey:elementName];
    NSLog(@"%@", self.str);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值