我爱编程

JSON和XML

2015-12-06  本文已影响67人  SanMao_SFW

简介

JSON解析方案

XML的解析方式有2种

DOM:一次性将整个XML文档加载进内存,比较适合解析小文件
SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件

SAX

(从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件)

简介

<videos> // 根元素
    <video name="小黄人 第01部" length="30" />
    <video name="小黄人 第02部" length="19" />
    <video name="小黄人 第03部" length="33" />
</videos>

XML语法 – 文档声明

<?xml version="1.0" ?>
<?xml version="1.0" encoding="UTF-8" ?>

XML语法 – 元素(Element)

<videos>
    <video>
        <name>小黄人 第01部</name>
          <length>30</length>
    </video>
</videos>

XML语法 – 属性(Attribute)

<video name="小黄人 第01部" length="30" /video>
- video元素拥有name和length两个属性
- 属性值必须用 双引号"" 或者 单引号'' 括住
<video>
    <name>小黄人 第01部</name>
        <length>30</length>
</video>

XML解析

NSXMLParser
// 传入XML数据,创建解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 设置代理,监听解析过程
parser.delegate = self;
// 开始解析
[parser parse];
NSXMLParserDelegate
当扫描到文档的开始时调用(开始解析)
- (void)parserDidStartDocument:(NSXMLParser *)parser

当扫描到文档的结束时调用(解析完毕)
- (void)parserDidEndDocument:(NSXMLParser *)parser

当扫描到元素的开始时调用(attributeDict存放着元素的属性)
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

当扫描到元素的结束时调用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

DOM

(一次性将整个XML文档加载进内存,比较适合解析小文件)

GDataXML配置

GDataXML使用

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    // 创建url
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/video?type=XML"];
    
    // 创建请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        // 解析数据
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:kNilOptions error:nil];
        // 获取根元素
        GDataXMLElement *rootElement = doc.rootElement;
        // 从根元素中获取每一个子元素
        NSArray *element = [rootElement elementsForName:@"video"];
        // 遍历子元素,转换成模型
        for (GDataXMLElement *ele in element) {
            // 创建模型
            SFWVideo *video = [[SFWVideo alloc] init];
            // 给模型的属性赋值
            video.name = [ele attributeForName:@"name"].stringValue;
            video.url = [ele attributeForName:@"url"].stringValue;
            video.image = [ele attributeForName:@"image"].stringValue;
            video.length = @([ele attributeForName:@"length"].stringValue.integerValue);
            [self.videos addObject:video];
            
        }
        
        // 刷新数据
        [self.tableView reloadData];
    }];
}

JSON和XML比较

上一篇下一篇

猜你喜欢

热点阅读