- 浏览: 2533070 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
jsntghf:
peio 写道这个怎么运行?Ruby On Rails的环境搭 ...
多文件上传之uploadify -
peio:
这个怎么运行?
多文件上传之uploadify -
往事如烟1:
我的项目是自己init了一个原始的project,之后将ver ...
React Native热部署之CodePush -
jsntghf:
往事如烟1 写道我按照你的说明进行,发现app退出之后,在进入 ...
React Native热部署之CodePush -
往事如烟1:
我按照你的说明进行,发现app退出之后,在进入不正确,请问是什 ...
React Native热部署之CodePush
对xml进行解析的标准有两种:sax以及dom。
首先这两种标准并不是针对java的,他们在各种语言环境下都可以实现。dom是真正的国际标准,sax是事实的标准,它不由任何商业组织维护,而是由一个非商业的组织在运作。就像iso7层模型和tcp/ip一样,虽然sax不是正式的标准,但是一点也不影响他在xml解析领域的地位。
dom实现的原理是把整个xml文档一次性读出,放在一个树型结构里。在需要的时候,查找特定节点,然后对节点进行读或写。他的主要优势是实现简单,读写平衡;缺点是比较占内存,因为他要把整个xml文档都读入内存,文件越大,这种缺点就越明显。
sax的实现方法和dom不同,他只在xml文档中查找特定条件的内容,并且只提取需要的内容。这样做占用内存小,灵活,正好满足我们的需求。他的缺点就是写,有些资料介绍了写入的方法,这里就不赘述了。
NSXMLParser实现的是sax方法解析xml文件。
xmlParseViewController.h
#import <UIKit/UIKit.h> @interface xmlParseViewController : UIViewController<NSXMLParserDelegate> { NSMutableArray *chatArray; NSString *chatFile; NSMutableDictionary *currentChatInfo; NSMutableString *currentString; BOOL storingCharacters; IBOutlet UITableView *table; } @end
xmlParseViewController.m
#import "xmlParseViewController.h" @implementation xmlParseViewController static NSString *kName_Chats = @"chats"; static NSString *kName_Chat = @"chat"; static NSString *kName_Speaker = @"speaker"; static NSString *kName_Text = @"text"; //开始处理xml数据,它会把整个xml遍历一遍,识别元素节点名称 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *) qualifiedName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:kName_Chats]) { [chatArray removeAllObjects]; } else if ([elementName isEqualToString:kName_Chat]) { [currentChatInfo removeAllObjects]; } else if ([elementName isEqualToString:kName_Speaker] || [elementName isEqualToString:kName_Text]) { [currentString setString:@""]; storingCharacters = YES; } } //存储从parser:(NSXMLParser *)parser foundCharacters:(NSString *)string方法中获取到的信息 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:kName_Chats]) { } else if ([elementName isEqualToString:kName_Chat]) { [chatArray addObject:[NSDictionary dictionaryWithDictionary:currentChatInfo]]; } else if ([elementName isEqualToString:kName_Speaker] || [elementName isEqualToString:kName_Text]) { [currentChatInfo setObject:[NSString stringWithString:currentString] forKey:elementName]; } storingCharacters = NO; } //得到文本节点里存储的信息数据 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if (storingCharacters) [currentString appendString:string]; } - (void)viewDidLoad { [super viewDidLoad]; NSString *path=[[NSBundle mainBundle] pathForResource:@"chatLog" ofType:@"xml"]; currentString = [[NSMutableString alloc] initWithCapacity:0]; currentChatInfo = [[NSMutableDictionary alloc] initWithCapacity:2]; chatArray = [[NSMutableArray alloc] initWithCapacity:0]; [NSThread detachNewThreadSelector:@selector(loadThread:) toTarget:self withObject:path]; } - (void) finshLoadFile { UITableView *tableView = (UITableView *)table; [tableView reloadData]; } - (void) loadThread:(NSString *)xmlFile { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSXMLParser *chatLogParser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL fileURLWithPath:xmlFile]]; [chatLogParser setDelegate:self]; [currentString setString:@""]; [currentChatInfo removeAllObjects]; [chatLogParser parse]; [chatLogParser release]; [self performSelectorOnMainThread:@selector(finshLoadFile) withObject:nil waitUntilDone:YES]; [pool release]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [chatArray count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; cell.backgroundColor = [UIColor colorWithRed:0.859f green:0.886f blue:0.929f alpha:1.0f]; cell.selectionStyle = UITableViewCellSelectionStyleNone; } NSDictionary *chatInfo = [chatArray objectAtIndex:[indexPath row]]; cell.textLabel.text = [chatInfo objectForKey:@"text"]; cell.detailTextLabel.text = [chatInfo objectForKey:@"speaker"]; return cell; } - (void)dealloc { [currentString release]; [currentChatInfo release]; [chatArray release]; [super dealloc]; } @end
主要就是实现NSXMLParserDelegate中的三个解析的方法。
- xmlParse.zip (691.4 KB)
- 下载次数: 85
发表评论
-
Error watching file for changes: EMFILE
2016-12-15 11:57 1302执行npm start后报错: Error watc ... -
CocoaPods升级1.1.1报错
2016-12-15 08:39 795ERROR: While executing gem .. ... -
Visual Studio Code运行React Native报错
2016-06-13 09:43 1614React Native:0.27.2 React:15 ... -
React Native 0.27.2编译报错this._nativeModule.addListener is not a function
2016-06-12 15:21 3857React Native:0.27.2 React:15 ... -
Unable to resolve module ReactDefaultPerf from
2016-06-02 13:04 2785package.json信息如下: "reac ... -
React Native 0.26.2编译报错Undefined symbols for architecture x86_64
2016-05-26 11:15 2019React Native:0.26.2 React:15. ... -
Failed to update auto layout status: Failed to load designables from path (null)
2016-04-05 22:11 1714确保CocoaPods是0.36.1以上版本,然后在podf ... -
集成微信支付出现Undefined symbols for architecture x86_64错误
2016-03-21 13:22 1751Undefined symbols for architec ... -
React Native热部署之CodePush
2016-01-10 22:27 6247本文使用的环境是Mac OS 10.11.1、Xcode ... -
浅谈React Native中的FlexBox布局
2015-11-17 18:38 4305React Native通过一个基于FlexBox的布局引 ... -
React Native之构建一个简单的列表页
2015-10-23 14:45 2165本文中我们将创建一个简单的电影应用,这个应用将从Rotten ... -
React Native之环境搭建
2015-10-20 16:30 1446本文使用的环境是Mac O ... -
获取图片属性的方法
2015-10-18 20:43 3145很多时候我们需要获 ... -
NSCache的下标用法
2015-09-18 00:19 1216NSCache类和NSDictionary类很相似,也提供 ... -
如何给category添加属性
2015-08-16 10:41 692主要是使用了runtime中的associative机制。 ... -
UITableView的两种重用Cell方法的区别
2015-08-10 13:07 16149UITableView中有两种重用Cell的方法: - ... -
SDImageCache.m报错Unused variable 'fileName'
2015-08-04 21:56 1175GCC手册中的相关解释: unused:This att ... -
Swift调用Objective-C
2015-07-13 23:33 1228Swift调用Objective-C需要一个名为<工程 ... -
使用GCD实现倒计时
2015-07-24 21:47 1085__block int timeout = 60; // ... -
导航栏加分割线的实现
2015-07-01 22:00 1763self.view.backgroundColor = [U ...
相关推荐
在Objective-C中,我们可以利用苹果提供的`NSXMLParser`类来解析XML数据。本示例("XMLParserDemo")将深入探讨如何使用`NSXMLParser`进行XML解析。 `NSXMLParser`是Apple的Foundation框架的一部分,它提供了一个...
ios xml解析 NSXMLParser。 NSXMLParser是基于SAX的解析方式。NSXMLParser采用了委托设计模式,因此他的实现类需要采用协议并支持委托。NSXMLParser解析XML需要委托NSXMLParserDelegate实现。
以下是如何使用NSXMLParser解析XML的步骤: 1. 创建一个NSXMLParser对象,传入XML数据源。 2. 实现NSXMLParserDelegate协议,定义处理XML元素开始、结束、属性等事件的方法。 3. 开始解析过程,`[parser parse]`。 ...
1. 使用NSXMLParser解析XML: NSXMLParser是一个Objective-C类,它会在解析过程中触发一系列的代理方法。你需要实现这些方法来处理XML元素的开始、结束、属性等。例如,`-parser:didStartElement:namespaceURI:...
总之,这个源码示例可能展示了如何使用NSXMLParser解析XML文件,提取所需数据,并将数据存储回XML文件的过程。通过深入理解XML解析和数据持久化机制,开发者可以更好地处理iOS应用中的数据交换和存储需求。
3. NSConnection接收到数据后,启动NSXMLParser解析XML内容。 4. 实现NSXMLParserDelegate协议,定义处理XML元素的回调方法,将解析出的数据转化为应用程序所需的模型对象。 5. 将解析好的数据展示给用户或存储到...
使用NSXMLParser解析XML;使用NSJSONSerialization解析JSON。 # GCD Grand Central Dispatch (GCD)多线程。 # UI UIKit Framework Reference # Photo Photos Framework And PhotosUI Framework。 # Utils ...
首先,iOS提供了两种主要的方式来解析XML数据:NSXMLParser和GDataXMLNode。NSXMLParser是苹果提供的原生XML解析器,基于事件驱动模型,适合处理大型XML文件,因为它不需要一次性加载整个文件到内存。而GDataXMLNode...
接下来,描述中提到了"使用NSXMLParser解析Xml"。当接收到SOAP响应,其数据格式通常是XML,我们需要解析这些数据以获取有用的信息。NSXMLParser是Apple提供的一款XML解析器,它可以逐行解析XML文档,根据元素的开始...
NSXMLParser是Apple提供的一个Objective-C类,它允许开发者解析XML文档。本教程将深入探讨如何使用NSXMLParser进行XML解析,特别关注在iOS应用中实现这一过程的细节。 XML文档结构清晰,具有自解释性,可以包含元素...
总结来说,使用Swift和NSXMLParser解析XML数据主要包括以下步骤: 1. 创建NSXMLParser实例,传入XML文件URL。 2. 设置代理为遵循NSXMLParserDelegate协议的对象。 3. 实现NSXMLParserDelegate的方法,如`parser(_:...
下面我们将详细介绍如何使用`NSXMLParser`来解析XML数据。 1. **创建XML解析器实例** 首先,你需要创建一个`NSXMLParser`实例,传入XML数据的NSData对象。在解析过程中,`NSXMLParser`会调用一系列的代理方法,...
用于NSXMLParser的ReactiveCocoa扩展:一种简洁的,基于流的API,用于使用NSXMLParser解析XML。 围绕定义包装器,从而不再需要实现繁琐的委托方法。 应用所需的任何ReactiveCocoa魔术(请参阅 ): # import " ...
在iOS中,有多种解析XML的方法,如NSXMLParser、GDataXMLNode和libxml等。libxml是一个功能强大的C语言库,提供了XML解析、DOM操作和XPath等功能,适用于需要高效、低级操作的场景。 在这个通用类中,核心是使用...
总结一下,这个"iOS xml解析和json解析demo"将涵盖如何在iOS应用中解析XML数据,包括使用NSXMLParser和XMLParser,以及如何解析和序列化JSON数据,包括使用内置的JSONSerialization类和可能涉及的一些第三方库。...
本话题将深入探讨如何使用AISHTTP发送网络请求,并利用NSXMLParser解析接收到的XML文件,以及开源中国项目中使用TBXML作为替代的解析器。 首先,AISHTTP是一个基于NSURLConnection的网络请求库,它简化了HTTP请求的...
GDataXML库(又称libxml2)是一个Objective-C封装的XML解析库,它提供了一种更面向对象的方式来解析XML。与NSXMLParser不同,GDataXML支持XPath查询,允许开发者更方便地定位和提取XML文档中的特定节点。例如,可以...
xml解析的两种常用方式, DOM解析:一次性将整个XML文档加载进内存,比较适合解析小文件,例如:GDataXml解析 ...SAX解析:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件,例如:NSXMLParser解析
OC中可以使用NSXMLParser来解析XML文档。 1. 创建XML解析器并设置代理: ```objective-c NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData]; parser.delegate = self; [parser parse]; ``` ...