最近项目用到了从服务器获取xml文件,需要解析xml来获取数据,下面简单举个例子,以便自己以后学习并复习。另外http://www.w3school.com.cn/xpath/xpath_examples.asp上有一些例子,有兴趣的同学可以去看看xml的相关知识。
从服务器上下载的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<page>
<ROWSET>
<ROW num="1"><!-- 订单1 -->
<ORDERNO>C1007260000037</ORDERNO><!-- 订单号,选填 -->
<STATUS>E</STATUS><!-- 订单状态 -->
<TOTALPAYMONEY>6810</TOTALPAYMONEY><!-- 订单总价 -->
<CREATEDATE>2010-07-26</CREATEDATE><!-- 订单创建日期 -->
<CAMPAIGNSCRIPTID>6</CAMPAIGNSCRIPTID><!-- 订单类型标识 -->
<SEGINFO><!-- 订单航段 -->
<SEGINFO_ROW num="1"><!-- 订单航段1 -->
<CARRIER>CZ</CARRIER>
<DEPCODE>CAN</DEPCODE>
<ARRCODE>PEK</ARRCODE>
<DEPPORT> 广州</DEPPORT>
<ARRPORT> 北京</ARRPORT>
<CARRIER>CZ</CARRIER>
<FLIGHTNO>3107</FLIGHTNO>
<DEPTIME>2010-07-28</DEPTIME>
<ARRTIME>2010-07-28</ARRTIME>
</SEGINFO_ROW>
<SEGINFO_ROW num="2"><!-- 订单航段2 -->
<CARRIER>CZ</CARRIER>
<DEPCODE>PEK</DEPCODE>
<ARRCODE>CAN</ARRCODE>
<DEPPORT> 北京</DEPPORT>
<ARRPORT> 广州</ARRPORT>
<CARRIER>CZ</CARRIER>
<FLIGHTNO>3104</FLIGHTNO>
<DEPTIME>2010-07-29</DEPTIME>
<ARRTIME>2010-07-29</ARRTIME>
</SEGINFO_ROW>
</SEGINFO>
</ROW>
<ROW num="2">
<ORDERNO>C1007260000034</ORDERNO>
<DOMESTICINDICATE>1</DOMESTICINDICATE>
<STATUS>C</STATUS>
<TOTALPAYMONEY>2010</TOTALPAYMONEY>
<CREATEDATE>2010-07-26</CREATEDATE>
<CAMPAIGNSCRIPTID>6</CAMPAIGNSCRIPTID>
<SEGINFO>
<SEGINFO_ROW num="1">
<CARRIER>CZ</CARRIER>
<DEPCODE>CAN</DEPCODE>
<ARRCODE>PEK</ARRCODE>
<DEPPORT> 广州</DEPPORT>
<ARRPORT> 北京</ARRPORT>
<CARRIER>CZ</CARRIER>
<FLIGHTNO>3107</FLIGHTNO>
<DEPTIME>2010-07-28</DEPTIME>
<ARRTIME>2010-07-28</ARRTIME>
</SEGINFO_ROW>
</SEGINFO>
</ROW>
</ROWSET>
</page>
上面的xml中主要需要两个循环,一个:ROWSET下的ROW节点 ,一个是:SEGINFO下的SEGINFO_ROW节点
UserOrder *orderObj 自己定义的数据结构,用来存放xml数据
//初始化数据源,从(NSData*)aData参数中
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:aData options:0 error:&error];
NSMutableArray *orderArray = [[NSMutableArray alloc] initWithCapacity:2];
NSArray *orders = [doc nodesForXPath:@"//ROW" error:aError];//循环ROW节点
for (GDataXMLElement *order in orders) {
UserOrder *orderObj = [[UserOrder alloc] init];
//获取ROW节点下节点数据
orderObj.orderNo = [order stringForTextNodeNamed:@"ORDERNO"];
orderObj.status = [order stringForTextNodeNamed:@"STATUS"];
orderObj.price = [order stringForTextNodeNamed:@"TOTALPAYMONEY"];
orderObj.date = [order stringForTextNodeNamed:@"CREATEDATE"];
orderObj.orderType = [order stringForTextNodeNamed:@"CAMPAIGNSCRIPTID"];
NSArray *segmentElementArray = [order nodesForXPath:@"SEGINFO/SEGINFO_ROW" error:aError];//循环SEGINFO_ROW节点
if (segmentElementArray != nil) {
for (GDataXMLElement *segmentElement in segmentElementArray) {
OrderSegment *segment = [[OrderSegment alloc] init];
//获取SEGINFO_ROW节点下数据
segment.carrier = [segmentElement stringForTextNodeNamed:@"CARRIER"];
segment.flightType = [segmentElement stringForTextNodeNamed:@"FLIGHTNO"];
segment.depCode = [segmentElement stringForTextNodeNamed:@"DEPCODE"];
segment.arrCode = [segmentElement stringForTextNodeNamed:@"ARRCODE"];
segment.depPort = [segmentElement stringForTextNodeNamed:@"DEPPORT"];
segment.arrPort = [segmentElement stringForTextNodeNamed:@"ARRPORT"];
segment.flightNo = [segmentElement stringForTextNodeNamed:@"FLIGHTNO"];
segment.depTime = [segmentElement stringForTextNodeNamed:@"DEPTIME"];
segment.arrTime = [segmentElement stringForTextNodeNamed:@"ARRTIME"];
[orderObj.segments addObject:segment];
[segment release];
}
[orderArray addObject:orderObj];
}
[orderObj release];
}
return [orderArray autorelease];//返回数据
分享到:
相关推荐
2 调用解析类,提供对象名。 3 返回NSMutableDictionary或者NSMutableArray,键值封装。 示例见最后的注释。 XML封装类待续。。。 转载请注明来源,谢谢 ====== XmlResolve.h #import ...
4 利用解析类解析并展现到UIView 部分代码如下: @implementation XmlPackage @synthesize obj; @synthesize isList; @synthesize xmlString; @synthesize objectName; @synthesize lvUp; @synthesize root; @...
在Objective-C中,HTMLParser通常通过解析HTML源码来获取DOM(Document Object Model)树,这是一种表示HTML或XML文档的结构模型。 博客文章《Objective-C的一个HTMLParser》提供了详细的使用示例,作者ccnyou在...
Objective-C 是一种面向对象的编程语言,主要应用于Apple的iOS和macOS平台开发。它是在C语言的基础上扩展了Smalltalk的特性,如消息传递、动态类型等,使得它成为开发苹果生态系统应用程序的强大工具。Kindle的mobi...
8. **网络编程**:介绍如何在Objective-C中实现网络通信,包括HTTP请求、JSON解析、XML处理等。 9. **测试与调试**:讲解如何编写单元测试,以及使用Xcode的调试工具进行问题排查。 10. **App Store发布流程**:...
在这个上下文中,它可能包含了Objective-C思维导图的具体内容,用XML(eXtensible Markup Language)编码,这是一种结构化数据的标记语言,用于描述文档结构和内容。 "Thumbnails"可能是一个文件夹,包含着思维导图...
《Objective-C编程之道:iOS设计模式解析》是一本专注于探讨iOS应用开发中设计模式的专著。这本书深入浅出地讲解了如何在Objective-C编程环境中有效地应用设计模式,旨在提升开发者对iOS应用架构的理解和实践能力。...
- Objective-C是C语言的超集,添加了消息传递和面向对象特性,是iOS和macOS开发的主要语言。 - 在iOS应用中,Objective-C用于编写业务逻辑、网络通信、数据处理等非界面部分,同时也与NIB文件交互,解析并实例化...
- **Runtime**:Objective-C的运行时系统提供了动态性,如动态类型、方法解析等。 - ** Blocks**:Objective-C的Block类似于Swift的闭包,用于封装一段代码。 - **NSObject与NSProtocol**:了解这些基础框架类和...
1. **声明代理**:为了处理XML解析事件,我们需要实现`NSXMLParserDelegate`协议。这将允许我们在解析过程中接收和处理各种回调方法。 ```objc @interface MyClass : NSObject ``` 2. **初始化解析器**:创建`...
此外,可能还会有XML解析和生成的相关代码,以及针对iOS和Android的适配层,确保在两个平台上都能正常工作。 8. **应用实现细节**: 开发者可能使用CoreBluetooth框架来处理iOS端的蓝牙操作,而Android端则可能使用...
然而,在某些情况下,开发者可能需要将Xib转换为Objective-C代码,以便更好地控制代码逻辑,或者为了提高性能而避免运行时加载Xib。下面将详细介绍如何实现这个转换过程。 首先,我们需要理解Xib文件的结构。Xib是...
8. **网络编程**:Objective-C Recipes可能会涉及URLSession、JSON解析(如NSJSONSerialization)、XML解析等网络请求和数据解析技术。 9. **Core Data**:苹果提供的持久化框架,用于存储和检索应用程序的数据。...
标题 "protobuf-objectivec-3.0.0.zip" 指的是Google的Protocol Buffers(简称protobuf)在Objective-C语言下的版本3.0.0。Protocol Buffers是一种数据序列化协议,它允许开发者定义数据结构,然后生成可以读写这些...
### Core Data in Objective-C: 数据存储与管理的关键技术 #### 核心概念解析 **Core Data** 是苹果为iOS和OS X开发的应用程序提供的一种强大而灵活的数据管理和持久化框架。它不仅支持对象图管理、数据持久化以及...
Swift-IDNFeedParser是一个专为Objective-C开发者设计的RSS解析库,它简化了RSS源的处理,使得在iOS和macOS应用中集成RSS阅读功能变得轻而易举。这个库的核心在于提供了一种高效且直观的方式来解析RSS feed,将XML...
Objective-C是苹果公司为iOS和macOS平台开发的应用程序的主要语言,它在C语言的基础上扩展了Smalltalk风格的消息传递机制,支持面向对象编程。 【描述】中的信息虽然简洁,但暗示了这是一个实际的开发项目,可能...
XML解析是将XML文档转换为程序可以处理的数据结构的关键步骤。本资源“ios-XML解析.zip”显然关注的是如何在iOS应用中有效地处理XML数据,并将其与表格展示相结合。下面我们将深入探讨iOS中的XML解析方法以及如何将...