参考文章 http://blog.csdn.net/ryantang03/article/details/7868246

适合解析一个节点多个属性要用GDataXml 格式如下

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

<result spend_time="16ms">>

<data>

<item wait_count="4"max_wait_time="10"branch_id="0">

<item wait_count="0"max_wait_time="7" branch_id="232051000" />

<item wait_count="0"max_wait_time="4" branch_id="232051001" />

</item>

</data>

</result>

   NSString *path=[[NSBundle mainBundle] pathForResource:@"" ofType:@"xml"];
NSData *data=[[NSData alloc] initWithContentsOfFile:path];
GDataXMLDocument *doc=[[GDataXMLDocument alloc] initWithData:data options: error:nil];
//获取根节点
GDataXMLElement *rootElement=doc.rootElement; NSArray *arr=[rootElement nodesForXPath:@"//item/item" error:nil];
for (GDataXMLElement *ele in arr) {
NSLog(@"-->%@--->%@",[[ele attributeForName:@"wait_count"]stringValue],[[ele attributeForName:@"branch_name"]stringValue]);
}

一个节点一个属性,推荐使用下面方法

<?xml version="1.0" encoding="utf-8"?>

<Users>

<User id="001">

<name>Ryan</name>

<age>24</age>

</User>

<User id="002">

<name>Tang</name>

<age>23</age>

</User>

</Users>

封装方法

#import <Foundation/Foundation.h>

@protocol UseXmlParser <NSObject>

@optional
- (void)NetWorkBackConnectID:(int)connectID BackDic:(NSMutableDictionary*)aBackDic WithNetState:(int)netState; @end @interface UseXmlParser : NSObject<NSXMLParserDelegate>
{
id aTarget;
int aConnectId; NSMutableData *parData; NSXMLParser *xmlParser; NSMutableArray *dicNameArray;
BOOL endStringElement;
NSMutableString *keyString;
NSMutableDictionary *xmlDataSource;
}
-(id)initWithParserData:(NSData*)pData target:(id)toTarget connectId:(int)bConnectId; -(void)parser; @end ==========
#import "UseXmlParser.h" @implementation UseXmlParser -(id)initWithParserData:(NSData*)pData target:(id)toTarget connectId:(int)bConnectId{
if (self = [super init]) { aTarget = toTarget;
aConnectId = bConnectId; dicNameArray = [[NSMutableArray alloc] initWithCapacity:];
keyString = [[NSMutableString alloc] initWithCapacity:];
xmlDataSource=[[NSMutableDictionary alloc] initWithCapacity:];
endStringElement = FALSE; parData = [[NSMutableData alloc] initWithData:pData]; }
return self;
}
-(void)parser{
xmlParser = [[NSXMLParser alloc] initWithData:parData];
[xmlParser setDelegate:self];
[xmlParser parse];//开始解析
[xmlParser release];
} -(NSMutableDictionary*) getDic {
NSMutableDictionary *dic=xmlDataSource;
for (int i=; i<[dicNameArray count]; i++) {
dic=[dic objectForKey:(NSString*)[dicNameArray objectAtIndex:i]];
}
return dic;
}
- (NSString*)getListElement:(NSString*)elementName From:(NSArray*)array {
NSString *temp = elementName;
for (int i=; i<; i++) {
if ([array containsObject:elementName]) {
elementName = [NSString stringWithFormat:@"%@%d", temp, i+];
}
else {
return elementName;
}
}
return nil;
}
- (id)getStringByKey:(NSString*)key {
NSArray *array = [key componentsSeparatedByString:@"/"];
NSDictionary *dic = [NSDictionary dictionary];
for (int i=; i<[array count]-; i++) {
dic = [dic objectForKey:[array objectAtIndex:i]];
}
NSString *temp = [dic objectForKey:[array objectAtIndex:[array count]-]];
if (!temp) {
temp = @"";
}
return temp;
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if ([dicNameArray count]>) {
NSMutableDictionary *dic = [self getDic];
elementName = [self getListElement:elementName From:[dic allKeys]]; [dic setObject:[[NSMutableDictionary alloc] init] forKey:elementName];
[dicNameArray addObject:elementName];
}
else {
[xmlDataSource setObject:[[NSMutableDictionary alloc] init] forKey:elementName];
[dicNameArray addObject:elementName];
} endStringElement = TRUE;
[keyString setString:@""];
} -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
[keyString appendString:string];
}
- (NSMutableDictionary*)getLastDic {
NSMutableDictionary *dic=xmlDataSource;
for (int i=; i<[dicNameArray count]-; i++) {
dic=[dic objectForKey:(NSString*)[dicNameArray objectAtIndex:i]];
}
return dic;
}
-(void) removeLastDic {
if ([dicNameArray count]>) {
[dicNameArray removeLastObject];
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if (endStringElement) {
if (![keyString isEqualToString:@"\n"]) {
if ([keyString hasPrefix:@"\n"]) {
[keyString setString:[keyString substringFromIndex:]];
}
NSMutableDictionary *dic = [self getLastDic];
[dic setObject:[NSString stringWithString:keyString] forKey:[dicNameArray objectAtIndex:[dicNameArray count]-]];
}
} [keyString setString:@""];
endStringElement = FALSE;
[self removeLastDic]; }
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@" \nxml解析返回-->> %@",xmlDataSource);
if (aTarget && [aTarget respondsToSelector:@selector(NetWorkBackConnectID:BackDic:WithNetState:)]) {
[aTarget NetWorkBackConnectID:aConnectId BackDic:xmlDataSource WithNetState:];
}
} -(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
NSLog(@"--error-->%@",parseError.localizedDescription);
}
-(void)dealloc{ [dicNameArray release];
[keyString release];
[xmlDataSource release];
[super dealloc];
}
@end

使用方式

- (IBAction)click:(id)sender {

    UseXmlParser *parser1=[[UseXmlParser alloc] initWithParserData:data target:self connectId:];
[parser1 parser];
[parser1 release];
} - (void)NetWorkBackConnectID:(int)connectID BackDic:(NSMutableDictionary*)aBackDic WithNetState:(int)netState{
NSLog(@"--%@",aBackDic);
}

ios中GDataXML解析XML文档的更多相关文章

  1. Objective-C ,ios,iphone开发基础:使用GDataXML解析XML文档,(libxml/tree.h not found 错误解决方案)

    使用GDataXML解析XML文档 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用第三方的库,原因是解析效率更高.使用上更方便 这里主要介绍一下 ...

  2. 使用GDataXML解析XML文档

    转载自:http://blog.csdn.net/tangren03/article/details/7868246 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是 ...

  3. Java中Dom解析xml文档

    xml文档 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...

  4. IOS学习笔记27—使用GDataXML解析XML文档

    http://blog.csdn.net/ryantang03/article/details/7868246

  5. Xml学习笔记(3)利用递归解析Xml文档添加到TreeView中

    利用递归解析Xml文档添加到TreeView中 private void Form1_Load(object sender, EventArgs e) { XmlDocument doc = new ...

  6. 网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档,视频项目

    小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心: ...

  7. 使用dom4j解析XML文档

    dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...

  8. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  9. java解析xml文档(dom)

    DOM解析XML文档 读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件 ...

随机推荐

  1. 一个简易Asp.net网站日志系统

    前不久在网站上看到了网站日志访问记录组件UserVisitLogsHelp开源了! 这篇博客感觉还不错,就把源码download了下来,学习一下,发现里面的代码书写和设计并不是很好,于是自己改了改.自 ...

  2. SiteMapPath基本用法

    1.添加一个网站地图项 Web.sitemap项 2.在 Web.sitemap项的写法如下: <?xml version="1.0" encoding="utf- ...

  3. VS Code .vue文件代码缩进以及格式化代码

    首先在应用商店中搜索“Vetur”插件安装,然后进行下面操作: 文件->首选项->设置,然后在右边编辑框输入以下设置: { "prettier.tabWidth": 4 ...

  4. Spring Boot 集成Shiro和CAS

    Spring Boot 集成Shiro和CAS 标签: springshirocas 2016-01-17 23:03 35765人阅读 评论(22) 收藏 举报  分类: Spring(42)  版 ...

  5. 利用blob对象实现大文件分片上传

    首先说分片上传,我们在进行文件上传的时候,因为服务器的限制,会限制每一次上传到服务器的文件大小不会很大,这个时候我们就需要把一个需要上传的文件进行切割,然后分别进行上传到服务器. 假如需要做到这一步, ...

  6. bash shell中可以使用wait

    https://jingyan.baidu.com/article/b907e6278fbd8946e7891c17.html ==================================== ...

  7. Spring(十五):通过注解配置 Bean

    在ClassPath中扫描组件 1)组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件: 2)特定组件包含: --- @C ...

  8. 无法ping通自身

    今日,ping localhost 超时,ping 127.0.0.1 显示一般故障.无法访问自己电脑上的tomcat.... 居然,居然是防火墙打开了,关了就好了.我勒个去!!!!

  9. Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC

    在之前的<跟我学SpringMVC>中的<第七章 注解式控制器的数据验证.类型转换及格式化>中已经介绍过SpringMVC集成Bean Validation 1.0(JSR-3 ...

  10. 【转】一些linux基础命令

    学习Linux,其实很多基础命令很重要. 不论多么复杂的shell或者命令组合,都是一个一个的拼接组合命令拼接而成: 大号一个基本功,遇到需要的场景,信手拈来,随意组合拼接,是非常重要的. 恰好看到一 ...