[关闭]
@SanMao 2015-08-11T10:28:34.000000Z 字数 3178 阅读 1190

XML

网络


SAX

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

简介

  1. <videos> // 根元素
  2. <video name="小黄人 第01部" length="30" />
  3. <video name="小黄人 第02部" length="19" />
  4. <video name="小黄人 第03部" length="33" />
  5. </videos>

XML语法 – 文档声明

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

XML语法 – 元素(Element)

  1. <videos>
  2. <video>
  3. <name>小黄人 第01部</name>
  4. <length>30</length>
  5. </video>
  6. </videos>

XML语法 – 属性(Attribute)

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

XML解析

NSXMLParser
  1. // 传入XML数据,创建解析器
  2. NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
  3. // 设置代理,监听解析过程
  4. parser.delegate = self;
  5. // 开始解析
  6. [parser parse];
NSXMLParserDelegate
  1. 当扫描到文档的开始时调用(开始解析)
  2. - (void)parserDidStartDocument:(NSXMLParser *)parser
  3. 当扫描到文档的结束时调用(解析完毕)
  4. - (void)parserDidEndDocument:(NSXMLParser *)parser
  5. 当扫描到元素的开始时调用(attributeDict存放着元素的属性)
  6. - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
  7. 当扫描到元素的结束时调用
  8. - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

DOM

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

GDataXML配置

GDataXML使用

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

JSON和XML比较

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注