`
woodn_z
  • 浏览: 44957 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
文章分类
社区版块
存档分类
最新评论

objective-c XML解析

阅读更多
最近项目用到了从服务器获取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];//返回数据
分享到:
评论

相关推荐

    Objective-c解析XML封装

    2 调用解析类,提供对象名。 3 返回NSMutableDictionary或者NSMutableArray,键值封装。 示例见最后的注释。 XML封装类待续。。。 转载请注明来源,谢谢 ====== XmlResolve.h #import ...

    Objective-c对象组装XML

    4 利用解析类解析并展现到UIView 部分代码如下: @implementation XmlPackage @synthesize obj; @synthesize isList; @synthesize xmlString; @synthesize objectName; @synthesize lvUp; @synthesize root; @...

    Objective-C的一个HTMLParser

    在Objective-C中,HTMLParser通常通过解析HTML源码来获取DOM(Document Object Model)树,这是一种表示HTML或XML文档的结构模型。 博客文章《Objective-C的一个HTMLParser》提供了详细的使用示例,作者ccnyou在...

    objective-c kindle mobi格式

    Objective-C 是一种面向对象的编程语言,主要应用于Apple的iOS和macOS平台开发。它是在C语言的基础上扩展了Smalltalk的特性,如消息传递、动态类型等,使得它成为开发苹果生态系统应用程序的强大工具。Kindle的mobi...

    Objective-C 程序设计(第4版).(斯蒂芬).林冀等.高清扫描版

    8. **网络编程**:介绍如何在Objective-C中实现网络通信,包括HTTP请求、JSON解析、XML处理等。 9. **测试与调试**:讲解如何编写单元测试,以及使用Xcode的调试工具进行问题排查。 10. **App Store发布流程**:...

    Objective-C.xmind.zip

    在这个上下文中,它可能包含了Objective-C思维导图的具体内容,用XML(eXtensible Markup Language)编码,这是一种结构化数据的标记语言,用于描述文档结构和内容。 "Thumbnails"可能是一个文件夹,包含着思维导图...

    《Objective-C编程之道ios设计模式解析》电子书

    《Objective-C编程之道:iOS设计模式解析》是一本专注于探讨iOS应用开发中设计模式的专著。这本书深入浅出地讲解了如何在Objective-C编程环境中有效地应用设计模式,旨在提升开发者对iOS应用架构的理解和实践能力。...

    IOS应用源码之【应用】NIB to Objective-C converter.rar

    - Objective-C是C语言的超集,添加了消息传递和面向对象特性,是iOS和macOS开发的主要语言。 - 在iOS应用中,Objective-C用于编写业务逻辑、网络通信、数据处理等非界面部分,同时也与NIB文件交互,解析并实例化...

    精选iOS开发1000题,包含笔试题600道和面试题400道。基于Swift和Objective-C语言的知识点。.zip

    - **Runtime**:Objective-C的运行时系统提供了动态性,如动态类型、方法解析等。 - ** Blocks**:Objective-C的Block类似于Swift的闭包,用于封装一段代码。 - **NSObject与NSProtocol**:了解这些基础框架类和...

    简介Objective-C解析XML与JSON数据格式的方法

    1. **声明代理**:为了处理XML解析事件,我们需要实现`NSXMLParserDelegate`协议。这将允许我们在解析过程中接收和处理各种回调方法。 ```objc @interface MyClass : NSObject ``` 2. **初始化解析器**:创建`...

    适用于iOS和Android的蓝牙LEMesh聊天_Objective-C_XML_下载.zip

    此外,可能还会有XML解析和生成的相关代码,以及针对iOS和Android的适配层,确保在两个平台上都能正常工作。 8. **应用实现细节**: 开发者可能使用CoreBluetooth框架来处理iOS端的蓝牙操作,而Android端则可能使用...

    xib转换成objective-c的方法

    然而,在某些情况下,开发者可能需要将Xib转换为Objective-C代码,以便更好地控制代码逻辑,或者为了提高性能而避免运行时加载Xib。下面将详细介绍如何实现这个转换过程。 首先,我们需要理解Xib文件的结构。Xib是...

    【Objective-C Recipes】[PDF+源代码] [iPhone/iPad/iOS]

    8. **网络编程**:Objective-C Recipes可能会涉及URLSession、JSON解析(如NSJSONSerialization)、XML解析等网络请求和数据解析技术。 9. **Core Data**:苹果提供的持久化框架,用于存储和检索应用程序的数据。...

    protobuf-objectivec-3.0.0.zip

    标题 "protobuf-objectivec-3.0.0.zip" 指的是Google的Protocol Buffers(简称protobuf)在Objective-C语言下的版本3.0.0。Protocol Buffers是一种数据序列化协议,它允许开发者定义数据结构,然后生成可以读写这些...

    Core Data in Objective-C Data Storage and Management for iOS and OS X(3rd)

    ### Core Data in Objective-C: 数据存储与管理的关键技术 #### 核心概念解析 **Core Data** 是苹果为iOS和OS X开发的应用程序提供的一种强大而灵活的数据管理和持久化框架。它不仅支持对象图管理、数据持久化以及...

    swift-IDNFeedParser一个简单易用的Rss解析库(Objective-C)

    Swift-IDNFeedParser是一个专为Objective-C开发者设计的RSS解析库,它简化了RSS源的处理,使得在iOS和macOS应用中集成RSS阅读功能变得轻而易举。这个库的核心在于提供了一种高效且直观的方式来解析RSS feed,将XML...

    基于Objective-C开发的一款天气APP.zip

    Objective-C是苹果公司为iOS和macOS平台开发的应用程序的主要语言,它在C语言的基础上扩展了Smalltalk风格的消息传递机制,支持面向对象编程。 【描述】中的信息虽然简洁,但暗示了这是一个实际的开发项目,可能...

    ios-XML解析.zip

    XML解析是将XML文档转换为程序可以处理的数据结构的关键步骤。本资源“ios-XML解析.zip”显然关注的是如何在iOS应用中有效地处理XML数据,并将其与表格展示相结合。下面我们将深入探讨iOS中的XML解析方法以及如何将...

Global site tag (gtag.js) - Google Analytics