解析XML
来源:互联网 发布:java高并发orm 编辑:程序博客网 时间:2024/06/08 06:52
//
// ParserDataViewController.m
// AppUI组件学习
//
// Created by 麦子 on 15/6/27.
// Copyright (c) 2015年 麦子. All rights reserved.
//
#import "ParserDataViewController.h"
#import "StudentByXml.h"
@interface ParserDataViewController (){
NSMutableArray *array;
StudentByXml *xmlEntity;
NSString *proName;
bool flag;
}
@end
@implementation ParserDataViewController
- (void)viewDidLoad {
[superviewDidLoad];
self.view.backgroundColor = [UIColorwhiteColor];
self.title =@"xml和Json数据解析";
[selfcreate];
}
- (void)create{
UIButton *json = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];
[json setTitle:@"json解析"forState:UIControlStateNormal];
json.tag =1;
json.frame =CGRectMake(50,100, 300, 100);
[json addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:json];
UIButton *xml = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];
[xml setTitle:@"xml解析"forState:UIControlStateNormal];
xml.frame =CGRectMake(50,300, 300, 100);
xml.tag =2;
[xml addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:xml];
}
// 初步熟悉网络请求
- (void)netWorkByStudent:(NSString *)urlRequest{
// 组装URL请求对象
NSURL *url = [NSURLURLWithString:urlRequest];
NSMutableURLRequest *request = [[NSMutableURLRequestalloc] initWithURL:url];
// 请求设置
[requestsetHTTPMethod:@"post"];
// 设置参数
NSString *str =@"city=AA&password=12345";
NSData *data = [strdataUsingEncoding:NSUTF8StringEncoding];
[requestsetHTTPBody:data];
// 返回结果 -- 同步和异步
NSData *result = [NSURLConnectionsendSynchronousRequest:request
returningResponse:nilerror:nil];
//对数据处理,如字符串
NSString *resultStr = [[NSStringalloc] initWithData:resultencoding:NSUTF8StringEncoding];
}
- (void)btnClick:(UIButton *)btn{
switch (btn.tag) {
case 1:{
break;
}
case 2:{
// 获取完整路径
NSString *path = [[NSBundle mainBundle]pathForResource:@"xml_demo" ofType:@"xml"];
// 读到内存中
NSData *data = [NSData dataWithContentsOfFile:path];
// 构建xml对象
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 设定代理对象
parser.delegate =self;
// 开始转换
[parser parse];
// 解析内存数据
// NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// NSLog(@"%@",content);
break;
}
default:
break;
}
}
// 文档开始
- (void)parserDidStartDocument:(NSXMLParser *)parser{
array = [[NSMutableArray alloc] initWithCapacity:100];
}
// 元素开始
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if (flag) {
proName = elementName;
}
if ([elementName isEqualToString:@"student"]) {
xmlEntity = [[StudentByXml alloc] init];
flag =true;
//获取属性----强大的KVC,对于不确定但是有规律的key来说,简单方便。
NSArray *keyArray = [attributeDict allKeys];
for (NSString *key in keyArray) {
[xmlEntity setValue:[attributeDict objectForKey:key] forKey:key];
}
}
}
// 利用KVC形式设置数据
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
// if (![string isEqualToString:@"\n"]) {
if (flag && proName.length > 0 && string.length > 0) {
[xmlEntity setValue:string forKey:proName];
proName =@"";
}
// }
}
// 元素结束
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if (flag && [elementName isEqualToString:@"student"]) {
flag =false;
[array addObject:xmlEntity];
NSLog(@"%@--%@---%ld--%@---%@",xmlEntity.name,xmlEntity.sex,xmlEntity.age,xmlEntity.school,xmlEntity.area);
}
}
// 文档结束
- (void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"%@",array);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- PostgreSQL数据库电子书合集
- cocos2dx3.6 实现带光标的输入框
- Android Volley完全解析(一),初识Volley的基本用法
- redis设计与实现电子书合集
- glog的编译和使用(转+总结)
- 解析XML
- 结合Cloudfoundry v2详解warden的源码分析与使用(一)
- C++ 中的友元friend
- 几种常见的线性表存储结构
- Openlayers3 计算地图上任意两点间的距离
- 计算机视觉-sift(1)原理
- 面向模式的软件体系结构电子书合集
- 【Unity3d】资源依赖反查工具
- #if _MSC_VER > 1000 #pragma once #endif 作用解释