前提
最近在做这么一个功能, 就是现在各大视频网站都有的,手机视频软件里的视频投放到在同一WiFi下智能电视上进行播放。
DLNA
DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟), 其宗旨是Enjoy your music, photos and videos, anywhere anytime, DLNA(Digital Living Network Alliance) 由索尼、英特尔、微软等发起成立、旨在解决个人PC,消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能,目前成员公司已达280多家。
DLNA并不是创造技术,而是形成一种解决的方案,一种大家可以遵守的规范。所以,其选择的各种技术和协议都是当前所应用很广泛的技术和协议。
DLNA将其整个应用规定成5个功能组件。从下到上依次为:网络互连,网络协议,媒体传输,设备的发现控制和管理,媒体格式。
正题
通过我们自己的底层库,可以获取到相应设备的Location。但是,这个location是一个XML文件。
那么,我们接下来就说说,解析这个XML过程中的随记。
随记
我看了很多的技术帖子讲解在iOS解析XML的方式。主要的就是两种,一种是iOS系统自带的解析类NSXMLParser,另一种就是GDataXML。 关于这两种解析的具体方式我就不多介绍了。可以去参考iOS开发——XML/JSON数据解析
重点
一开始我们用的就是系统自带的,因为直觉感觉系统的会好一点,但是用了之后才知道这其中的辛酸泪啊!!!!后来我么那就用了GDataXML这个用起来轻便多了。但是我看网上的 各种例子都是加载本地的XML文件。下面我就上代码,怎么去解析一个网络的XML文件。
NSString *xmlStr = [@"写入你获取的网络XML文件的URL" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* xml = [NSString stringWithContentsOfURL:[NSURL URLWithString:xmlStr] encoding:NSUTF8StringEncoding error:nil];
GDataXMLDocument* xmlDoc = [[GDataXMLDocument alloc]initWithXMLString:xml options:0 error:nil];
GDataXMLElement *xmlEle = [xmlDoc rootElement];
NSLog(@"xmlELE = %@",xmlEle);
NSArray *array = [xmlEle elementsForName:@"device"];
for (GDataXMLElement *ele in array) {
GDataXMLElement *friendlyNameELe = [[ele elementsForName:@"friendlyName"]objectAtIndex:0];
NSString *friendlyNameStr = [friendlyNameELe stringValue];
NSLog(@"friendlyNameStr = %@",friendlyNameStr);
GDataXMLElement *iconListELe = [[ele elementsForName:@"iconList"]objectAtIndex:0];
GDataXMLElement *iconELe = [[iconListELe elementsForName:@"icon"]objectAtIndex:0];
GDataXMLElement *urlELe = [[iconELe elementsForName:@"url"]objectAtIndex:0];
NSString *urlStr = [urlELe stringValue];
NSLog(@"urlStr = %@",urlStr);
}
获取什么样的节点内容还是需要你自己去根据你自己的需求去做调整的,这里我们需要的就是friendlyName和url这两个节点的内容。