参考文章 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. iOS中的多线程 NSOperation

    在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下NSOperation的使用. NSOperation ...

  2. spark 指定相关的参数配置 num-executor executor-memory executor-cores

    num-executors参数说明:该参数用于设置Spark作业总共要用多少个Executor进程来执行.Driver在向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照你的设置来在集群的 ...

  3. Centos配置为驱动程序开发环境

    安装完centos后,写了一个驱动测试程序Hello.编译过程出现如下错误: make: *** /lib/modules/2.6.32-220.4.1.el6.i686/build: No such ...

  4. nginx location 匹配的规则

    nginx 的配置文件中, server里面的location 的配置项的理解: server { listen 24010; client_max_body_size 30M; location = ...

  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十七)Elasticsearch-6.2.2集群安装,组件安装

    1.集群安装es ES内部索引原理: <时间序列数据库的秘密(1)—— 介绍> <时间序列数据库的秘密 (2)——索引> <时间序列数据库的秘密(3)——加载和分布式计算 ...

  6. Cognos11中通过URL访问report的设置

    1:以往的cognos版本中在报表的属性中可以找到 url的属性,稍加修改就可以通过URL进行访问了 2:Cognos11中找了半天也没有报表URL这个属性,但是IBM官方也给出了解决方案 Answe ...

  7. Android Context完全解析,你所不知道的Context的各种细节

    Context相信所有的Android开发人员基本上每天都在接触,因为它太常见了.但是这并不代表Context没有什么东西好讲的,实际上Context有太多小的细节并不被大家所关注,那么今天我们就来学 ...

  8. Python 函数参数引用(传值/传址)/copy/deepcopy

    精简版: 传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组 ...

  9. js - 关于循环

    ES5:for,foreach,for..in ES6:for..of // ES5(可参见ES6的析构写法) const value = ["a", "b", ...

  10. VMware vSphere 5.1 群集深入解析(一)

    http://virtualbox.blog.51cto.com/531002/1168293 VMware vSphere 5.1 Clustering Deepdive HA.DRS.Storag ...