ios怎么解析xml的demo

网上有关“ios怎么解析xml的demo”话题很是火热,小编也是针对ios怎么解析xml的demo寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够...

网上有关“ios怎么解析xml的demo”话题很是火热,小编也是针对ios怎么解析xml的demo寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

ios中如何解析xml文件

两种方法:1.ios中已有的NSXMLParse类

2.Google的GDataXML也是基于libxml2的,因此在使用GDataXML之前,你需要先导入libxml2。

这里详解ios中的nsxmlparse:

NSXMLParser 实现的是sax方法解析xml文件。

dom实现的原理是把整个xml文档一次性读出,放在一个树型结构里。在需要的时候,查找特定节点,然后对节点进行读或写。他的主要优势是实现简单,读写平衡;缺点是比较占内存,因为他要把整个xml文档都读入内存,文件越大,这种缺点就越明显。

sax的实现方法和dom不同。他只在xml文档中查找特定条件的内容,并且只提取需要的内容。这样做占用内存小,灵活,正好满足我们的需求。他的缺点就是写,有些资料介绍了写入的方法,但是我感觉这对本例没有必要。

运行NSXMLParser涉及设置、运行和响应结果。

1)启动NSXMLParser

要使用NSXMLParser要先创建它,设置各种属性,主要用到以下几个方法:

initWithContentsOfURL 通过NSURL创建解析器

initWithData 通过NSData创建解析器

setDelegate 为解析器定义委托

parse 运行解析器

2)充当委托

最重要的5个方法:

//发现元素开始符的处理函数 (即报告元素的开始以及元素的属性)

- (void)parser:(NSXMLParser *)parser

didStartElement:(NSString *)elementName

namespaceURI:(NSString *)namespaceURI

qualifiedName:(NSString *)qName

attributes:(NSDictionary *)attributeDict

//处理标签包含内容字符 (报告元素的所有或部分内容)

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

//发现元素结束符的处理函数,保存元素各项目数据(即报告元素的结束标记)

- (void)parser:(NSXMLParser *)parser

didEndElement:(NSString *)elementName

namespaceURI:(NSString *)namespaceURI

qualifiedName:(NSString *)qName

//报告解析的结束

- (void)parserDidEndDocument:(NSXMLParser *)parser

//报告不可恢复的解析错误

- (void)paser:parserErrorOccured

1.申明了一个xml处理协议,用到NSXMLParser协议,用来具体处理我们要解析的xml文件,把需要的url取出来,存到指定的data里。

*/

//多线程处理类的定义,方法实现,与向主线程回传data

@class AppRecord;

//@protocol ParseOperationDelegate;

@protocol ParseOperationDelegate

- (void)didFinishParsing:(NSArray *)appList;

- (void)parseErrorOccurred:(NSError *)error;

@end

@interface ParseOperation : NSOperation {

@private

id <</span>ParseOperationDelegate> delegate;//,NSXMLParserDelegate

NSData *dataToParse;

NSMutableArray *workingArray;

AppRecord *workingEntry;

NSMutableString *workingPropertyString;

NSArray *elementsToParse;

BOOL storingCharacterData;

}

- (id)initWithData:(NSData *)data delegate:(id <<span >ParseOperationDelegate>)theDelegate;

@end

然后完成协议的初始化函数

- (id)initWithData:(NSData *)data delegate:(id <<span >ParseOperationDelegate>)theDelegate

{

self = [super init];

if (self != nil)

{

self.dataToParse = data;

self.delegate = theDelegate;

self.elementsToParse = [NSArray arrayWithObjects:kIDStr, kNameStr, kImageStr, kArtistStr, nil];

}

return self;

}

2.完成对特定标签的解析

#pragma mark -

#pragma mark RSS processing

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName

namespaceURI:(NSString *)namespaceURI

qualifiedName:(NSString *)qName

attributes:(NSDictionary *)attributeDict

{

// entry: { id (link), im:name (app name), im:image (variable height) }

//

if ([elementName isEqualToString:kEntryStr])

{

self.workingEntry = [[[AppRecord alloc] init] autorelease];

}

storingCharacterData = [elementsToParse containsObject:elementName];

}

3.找到具体的地址与内容,并存储

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName

namespaceURI:(NSString *)namespaceURI

qualifiedName:(NSString *)qName

{

if (self.workingEntry)

{

if (storingCharacterData)

{

NSString *trimmedString = [workingPropertyString stringByTrimmingCharactersInSet:

[NSCharacterSet whitespaceAndNewlineCharacterSet]];

[workingPropertyString setString:@""]; // clear the string for next time

if ([elementName isEqualToString:kIDStr])

{

self.workingEntry.appURLString = trimmedString;

}

else if ([elementName isEqualToString:kNameStr])

{

self.workingEntry.appName = trimmedString;

}

else if ([elementName isEqualToString:kImageStr])

{

self.workingEntry.imageURLString = trimmedString;

}

else if ([elementName isEqualToString:kArtistStr])

{

self.workingEntry.artist = trimmedString;

}

}

else if ([elementName isEqualToString:kEntryStr])

{

[self.workingArray addObject:self.workingEntry];

self.workingEntry = nil;

}

}

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

if (storingCharacterData)

{

[workingPropertyString appendString:string];

}

}

第三方解析方法::::::::::::

简介:采用KissXML第三方程序集来实现,需要引入libxml2.dylib

(另需注意运行时可能会提示“libxml/tree.h找不到“的问题,

解决办法: 在项目的 TARGETS 中选择一个目标,在右侧切换到 Build Settings 页,向下找到 Search

Paths 段,其中有一个 Header Search Paths 项,将其值设为:/usr/include/libxml2)如下图:

ProvinceCity.xml文件格式如下图:

程序主要代码如下:

#import"DDXML.h"

#import"DDXMLElementAdditions.h"

@implementation ViewController

//解析XML

staticNSString *kXML =@"//District//Province";

- (void)viewDidLoad

{

[superviewDidLoad];

NSString *path =[[NSStringalloc]initWithString:[[NSBundlemainBundle]pathForResource:@"ProvinceCity"ofType:@"xml"]];

NSData *data = [[NSDataalloc]initWithContentsOfFile:path];

[selfparsedDataFromData:dataandProvince:@"江西省"];

[selfparsedDataFromData:data];

[datarelease];

}

//取特定省份下包含所有城市

-(void)parsedDataFromData:(NSData *)data andProvince:(NSString *)province{

DDXMLDocument *doc = [[DDXMLDocumentalloc]initWithData:dataoptions:0error:nil];

/////解析

NSArray *items = [docnodesForXPath:kXMLerror:nil];

for (DDXMLElement *objin items) {

DDXMLNode *aUser = [obj attributeForName:@"Name"];//取属性Name的值

if ([aUser.stringValueisEqualToString:province])

{

NSArray *CityLst = [obj elementsForName:@"City"];//取城市点点列表,保存到数组中

if(CityLst.count>0)//第二层

{

for (DDXMLElement *citysin CityLst) {

DDXMLNode *citynode=[citys attributeForName:@"Name"];

NSLog(@"%@",citynode.stringValue);

}

}

}

}

[doc release];

}

//取所有省份及其下级节点,包含修改操作

-(void)parsedDataFromData:(NSData *)data{

DDXMLDocument *doc = [[DDXMLDocumentalloc]initWithData:dataoptions:0error:nil];

/////解析

NSArray *items = [docnodesForXPath:kXMLerror:nil];

for (DDXMLElement *objin items) {

DDXMLNode *aUser = [objattributeForName:@"Name"];//取属性Name的值

//[aUser setStringValue:@"haha!"];//修改属性节点的值

[objaddAttribute:[DDXMLNodeattributeWithName:@"test"stringValue:@"wzh"]];//增加一个属性节点

[objaddAttributeWithName:@"ttt"stringValue:@"343"];//再增加一个属性节点

//[obj setStringValue:@"NewNode"];//设置当前节点的值

DDXMLNode *newnode=[DDXMLNodeelementWithName:@"newNode"];//设置一个新的节点

[obj addChild:newnode];//给obj添加一个节点

DDXMLElement *newdxml = [[objelementsForName:@"newNode"]objectAtIndex:0];//访问刚刚添加的节点

[newdxmladdAttributeWithName:@"nodetwo"stringValue:@"twovalue"];//给刚添加的节点增加增的下级节点,并且下级节点再一个属性值

DDXMLNode *newnode2=[DDXMLNodeelementWithName:@"newNode2"stringValue:@"hello!"];

[newdxmladdChild:newnode2];

}

//保存到沙盒目录下

NSString *path =[[NSStringalloc]initWithFormat:@"%@/xmlData.xml", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0]];

NSString *result=[[NSStringalloc]initWithFormat:@"%@",doc];

[resultwriteToFile:pathatomically:YESencoding:NSUTF8StringEncoding error:nil];

//[result2 writeToFile:path atomically:YES];//这种方法不行,保存后会有乱码

[result release];

[path release];

[doc release];

}

关于“ios怎么解析xml的demo”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[xianggongguan]投稿,不代表象功馆立场,如若转载,请注明出处:https://xianggongguan.cn/zlan/202501-562.html

(8)

文章推荐

  • 旅游中间商对旅游的作用

    网上有关“旅游中间商对旅游的作用”话题很是火热,小编也是针对旅游中间商对旅游的作用寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。旅游中问商在旅游市场营销中占有特殊的地位,对旅游产品营销渠道的形成和运行起着重要的作用。旅游中问商的功能主要体现为市场调研、促进销

    2025年01月12日
    6
  • 新希望收购华英能否成功

    网上有关“新希望收购华英能否成功”话题很是火热,小编也是针对新希望收购华英能否成功寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。可能会。1、2021年6月16日,华英农业公告称,将与上海新增鼎资产管理有限公司(上海新增鼎资产管理有限公司是新希望旗下的公司)签

    2025年01月12日
    8
  • 股票低估值什么意思

    网上有关“股票低估值什么意思”话题很是火热,小编也是针对股票低估值什么意思寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。低估值股票是指被市场低估的股票,由于股价低于整体市场市盈率或行业市盈率而被低估,应高于现有股价,或偏离估值而低于估值的每股收益相对较高、股

    2025年01月13日
    7
  • 互联网金融面临的机遇与挑战

    网上有关“互联网金融面临的机遇与挑战”话题很是火热,小编也是针对互联网金融面临的机遇与挑战寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。相对于投资理财业务,贷款业务的特点非常明显。贷款业务的转化率显著强于投资理财业务,这是贷款业务相对容易做的优势。但是随着整

    2025年01月14日
    15
  • 小规模跟小微企业怎么区分

    网上有关“小规模跟小微企业怎么区分”话题很是火热,小编也是针对小规模跟小微企业怎么区分寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。法律主观:小微企业的划分标准主要包括以下三个:一、资产总额,工业企业不超过3000万元,其他企业不超过1000万元;二、从业人

    2025年01月16日
    7
  • 华英集团分公司加工厂有哪些

    网上有关“华英集团分公司加工厂有哪些”话题很是火热,小编也是针对华英集团分公司加工厂有哪些寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。华樱生物科技公司高端鸭血加工厂,河南华英农业发展股份有限公司加工厂。根据查询百度地图显示:1、华樱生物科技公司高端鸭血加工

    2025年01月19日
    7
  • 股市中的人气排名是什么意思

    网上有关“股市中的人气排名是什么意思”话题很是火热,小编也是针对股市中的人气排名是什么意思寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。股票关注度,关注人数%的数据,浏览器:电脑端:macbookpromos14打开google版本92.0.4515.131

    2025年01月20日
    6
  • 娃哈哈奶茶怎么样?

    网上有关“娃哈哈奶茶怎么样?”话题很是火热,小编也是针对娃哈哈奶茶怎么样?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。 近年来奶茶行业发展迅速,市场上涌现了许多知名的奶茶品牌,在许多的品牌中,娃哈哈奶茶就是这么一个值得提及的佼佼者,它的产品引人注目。已然许

    2025年01月20日
    5
  • 福建省五小明星活动有哪些

    网上有关“福建省五小明星活动有哪些”话题很是火热,小编也是针对福建省五小明星活动有哪些寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。“芗城区‘携爱同行?助力成长’暨创建‘法治五小明星’活动”、“全国科普日”。根据相关资料查询结果显示,共青团芗城区委、芗城区关

    2025年01月20日
    5
  • 饲料中药添加剂是否可以写药用功效

    网上有关“饲料中药添加剂是否可以写药用功效”话题很是火热,小编也是针对饲料中药添加剂是否可以写药用功效寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。可以。一些中药添加剂具有抗菌作用,可以预防和治疗畜禽的疾病,例如,清热解毒类中草药可以影响细菌的呼吸和代谢,具

    2025年01月21日
    5

发表回复

本站作者后才能评论

评论列表(4条)

  • xianggongguan
    xianggongguan 2025年01月16日

    我是象功馆的签约作者“xianggongguan”!

  • xianggongguan
    xianggongguan 2025年01月16日

    希望本篇文章《ios怎么解析xml的demo》能对你有所帮助!

  • xianggongguan
    xianggongguan 2025年01月16日

    本站[象功馆]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育

  • xianggongguan
    xianggongguan 2025年01月16日

    本文概览:网上有关“ios怎么解析xml的demo”话题很是火热,小编也是针对ios怎么解析xml的demo寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够...

    联系我们

    邮件:象功馆@sina.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们