解析XML
发布时间:2020-12-16 00:10:05 所属栏目:百科 来源:网络整理
导读:由于我们搭建好了Apache服务器,那么我们接下来看一下如何解析服务器返回的xml文件 虽然开发中,服务器返回的xml格式的数据较少,但是偶尔还是会有的。 由于解析xml没有比较好的第三方框架,所以我们还是乖乖的苦逼的写代码,虽然说,代码没有难度 xml数据:
xml数据: <videos>
<video videoId="1">
<name>张三</name>
<teacher>张老师</teacher>
</video>
</videos>
NSURL *url = [NSURL URLWithString:@"http://localhost/videos.xml"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:10.0];
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response,NSData * _Nullable data,NSError * _Nullable connectionError) {
//创建xml解析器
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
//设置代理
parser.delegate = self;
//开始解析
[parser parse];
}];
- (void)parserDidStartDocument:(NSXMLParser *)parser { NSLog(@"1.开始文档"); }
每发现一个开始节点就调用 /** * 每发现一个节点就调用 * * @param parser 解析器 * @param elementName 节点名字 * @param attributeDict 属性字典 */
* (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
NSLog(@"2.发现节点:%@",elementName);
if ([elementName isEqualToString:@"video"])
{
//创建模型对象
self.video = [[ZYVideo alloc]init];
}
[self.elementNameString setString:@""];
}
发现节点内容 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSLog(@"3.发现节点内容:%@",string);
//把发现的内容进行拼接
[self.elementNameString appendString:string]; }
发现结束节点 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName
{
NSLog(@"3.发现结束节点 %@",elementName);
// NSLog(@"拼接的内容%@",self.elementNameString);
if ([elementName isEqualToString:@"name"])
{
self.video.name = self.elementNameString;
}else if ([elementName isEqualToString:@"teacher"])
{
self.video.teacher = self.elementNameString;
}
}
解析完毕调用 - (void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"解析完毕---------");
NSLog(@"%@",self.video);
}
#pragma mark - 懒加载
- (NSMutableString *)elementNameString
{
if (_elementNameString == nil)
{
_elementNameString = [[NSMutableString alloc]init];
}
return _elementNameString;
}
搞定:看结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |