转载于:http://blog.csdn.net/crayondeng/article/details/8738768

下面简单介绍如何通过url获取xml的两种方式。

第一种方式相对简单,使用NSData的构造函数dataWithContentsOfURL;不多解释,直接上代码咯。

  1. NSURL *url = [NSURL URLWithString:@"http://222.73.161.212/ispace2/servlet/com.lemon.xml.XmlAction"];
  2. //A Boolean value that turns an indicator of network activity on or off.
  3. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  4. NSData *xmlData = [NSData dataWithContentsOfURL:url];
  5. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  6. NSString *xmlString = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding];
  7. if (xmlData == nil) {
  8. NSLog(@"File read failed!:%@", xmlString);
  9. }
  10. else {
  11. NSLog(@"File read succeed!:%@",xmlString);
  12. }

上面的  NSData *xmlData = [NSData dataWithContentsOfURL:url]; 就是获取xml的关键啦。

注意:如果直接输出xmlData的话会是一对unicode,所以用UTF-8编码转换成是String进行输出就好啦。

第二种方式:通过NSURLConnection建立网络连接,并实现它的几个委托方法,从而获取数据。

代码如下,应该可以看懂的。

  1. @implementation ViewController {
  2. BOOL getXmlDone;  //是否停止获取xml数据的标志
  3. NSMutableData *xmlData;  //存储获得的xml数据
  4. }
  5. //自定义的一个方法
  6. - (void) getXML {
  7. //获取xml
  8. xmlData = [NSMutableData data];
  9. //Clears the receiver’s cache, removing all stored cached URL responses.
  10. //清除接收器的缓存,删除所有存储的高速缓存的URL的响应。
  11. [[NSURLCache sharedURLCache] removeAllCachedResponses];
  12. NSURL *url = [NSURL URLWithString:@"http://222.73.161.212/ispace2/servlet/com.lemon.xml.XmlAction"];
  13. NSURLRequest *theRequest = [NSURLRequest requestWithURL:url];
  14. //create the connection with the request and start loading the data
  15. NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
  16. [self performSelectorOnMainThread:@selector(downloadStarted) withObject:nil waitUntilDone:NO];
  17. if (urlConnection != nil) {
  18. do {
  19. [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
  20. } while (!getXmlDone);
  21. }
  22. }
  23. #pragma mark NSURLConnection Delegate methods
  24. - (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse {
  25. return nil;
  26. }
  27. // Forward errors to the delegate.
  28. - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
  29. getXmlDone = YES;
  30. }
  31. // Called when a chunk of data has been downloaded.
  32. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
  33. // Append the downloaded chunk of data.
  34. [xmlData appendData:data];
  35. }
  36. - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  37. [self performSelectorOnMainThread:@selector(downloadEnded) withObject:nil waitUntilDone:NO];
  38. getXmlDone = YES;
  39. }
  40. - (void)downloadStarted {
  41. [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
  42. }
  43. - (void)downloadEnded {
  44. [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  45. }
  46. - (void)viewDidLoad
  47. {
  48. [super viewDidLoad];
  49. // Do any additional setup after loading the view, typically from a nib.
  50. [self getXML];
  51. NSString *xmlString = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding];
  52. NSLog(@"data: %@",xmlString);
  53. }
  54. - (void)didReceiveMemoryWarning
  55. {
  56. [super didReceiveMemoryWarning];
  57. // Dispose of any resources that can be recreated.
  58. }
  59. @end

小结一下,第一种简单,一次性获取所有的xml数据,第二种有点复杂,当然其灵活性也更好。

要验证获取的数据的准确性的话,就点击你的url吧!http://222.73.161.212/ispace2/servlet/com.lemon.xml.XmlAction

OK,下一篇文章将会介绍如何解析xml。come on!

iOS 通过URL网络获取XML数据的两种方式的更多相关文章

  1. SparkStreaming获取kafka数据的两种方式:Receiver与Direct

    简介: Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式,可以简单理解成: Receiver方式是通过zookeeper来连接kafka队列, Dire ...

  2. 工具篇-Spark-Streaming获取kafka数据的两种方式(转载)

    转载自:https://blog.csdn.net/weixin_41615494/article/details/7952173 一.基于Receiver的方式 原理 Receiver从Kafka中 ...

  3. Spark-Streaming获取kafka数据的两种方式:Receiver与Direct的方式

    简单理解为:Receiver方式是通过zookeeper来连接kafka队列,Direct方式是直接连接到kafka的节点上获取数据 Receiver 使用Kafka的高层次Consumer API来 ...

  4. spark-streaming获取kafka数据的两种方式

    简单理解为:Receiver方式是通过zookeeper来连接kafka队列,Direct方式是直接连接到kafka的节点上获取数据 一.Receiver方式: 使用kafka的高层次Consumer ...

  5. jQuery异步获取json数据的2种方式

    jQuery异步获取json数据有2种方式,一个是$.getJSON方法,一个是$.ajax方法.本篇体验使用这2种方式异步获取json数据,然后追加到页面. 在根目录下创建data.json文件: ...

  6. 使用web.xml方式加载Spring时,获取Spring context的两种方式

    使用web.xml方式加载Spring时,获取Spring context的两种方式: 1.servlet方式加载时: [web.xml] <servlet> <servlet-na ...

  7. easyUI之datagrid绑定后端返回数据的两种方式

    先来看一下某一位大佬留下的easyUI的API对datagrid绑定数据的两种方式的介绍. 虽然精简,但是,很具有“师傅领进门,修行靠个人”的精神,先发自内心的赞一个. 但是,很多人和小编一样,第一次 ...

  8. SparkStreaming与Kafka,SparkStreaming接收Kafka数据的两种方式

    SparkStreaming接收Kafka数据的两种方式 SparkStreaming接收数据原理 一.SparkStreaming + Kafka Receiver模式 二.SparkStreami ...

  9. strus2中获取表单数据 两种方式 属性驱动 和模型驱动

    strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...

随机推荐

  1. html中元素盒子垂直居中的实现方法

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. HDU 1069 Monkey and Banana 基础DP

    题目链接:Monkey and Banana 大意:给出n种箱子的长宽高.每种不限个数.可以堆叠.询问可以达到的最高高度是多少. 要求两个箱子堆叠的时候叠加的面.上面的面的两维长度都严格小于下面的. ...

  3. ES6学习一 JS语言增强篇

    一 背景 JavaScript经过二十来年年的发展,由最初简单的交互脚本语言,发展到今天的富客户端交互,后端服务器处理,跨平台(Native),以及小程序等等的应用.JS的角色越来越重要,处理场景越来 ...

  4. 安装wamp后,127.0.0.1可以访问,localhost不能访问

    今天安装wamp后,127.0.0.1可以访问,localhost不能访问,出现 “error You don't have permission to access”的错误, 网上查了下,很多方法都 ...

  5. Struts2基本使用(三)--数据交互

    Struts2中的数据交互 在Struts2中我们不必再使用request.getParameter()这种方式来获取前台发送到服务器的参数. 我们可以在服务器端的Java类中直接声明一个和前台发送数 ...

  6. 使用peach工具进行fuzz测试

    本文简要介绍了Fuzz 工具Peach的使用,并通过文件格式 Fuzz举例阐述了 Peach Pit 文件的编写. 本文转自“绿盟科技博客”:http://blog.nsfocus.net/peach ...

  7. 走在linux 的路上

    终于现在不看鸟哥的私房菜基础篇了,以后再慢慢看,像我这种初学者,感觉还是不太适合看鸟哥的私房菜. 于是从图书馆借了本书继续学习我的linux. 这样看着linux容易多了,进而熟悉了几个命令:ls c ...

  8. LOJ10131. 「一本通 4.4 例 2」暗的连锁【树上差分】

    LINK solution 很简单的题 你就考虑实际上是对每一个边求出两端节点分别在两个子树里面的附加边的数量 然后这个值是0第二次随便切有m种方案,如果这个值是1第二次只有一种方案 如果这个值是2或 ...

  9. ZeroClipboard.js兼容各种浏览器复制到剪切板上

    http://www.cnblogs.com/huijieoo/articles/5569990.html <script type="text/javascript" sr ...

  10. c++ 声明和定义的区别

    从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存.而定义就是分配了内存. int a;在外面是作为一个语句,这就是定义,会构造对象,定义本身也是声明. ...