博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解析不是utf-8的xml文件 附(tag 属性的获取 )
阅读量:6407 次
发布时间:2019-06-23

本文共 3034 字,大约阅读时间需要 10 分钟。

解析不是utf-8的xml文件(尤其是中文网站的rss文件):

如果url中有中文:

1 const char *str = [searchURL UTF8String];  
2 NSString *url = [NSString stringWithUTF8String:str];  
3 NSURL *url =[NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
4 NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

gbk编码的xml文件:

1 NSString *xmlStr = [[NSString alloc] initWithData:inData encoding:0x80000632];  2 NSString *newXMLStr = [xmlStr stringByReplacingOccurrencesOfString:@"encoding=/"gbk/"" withString:@"encoding=/"UTF-8/""];  3 NSXMLParser *nextParser = [[NSXMLParser alloc] initWithData:[newXMLStr dataUsingEncoding:NSUTF8StringEncoding]];

 

在iOS中解析XML

以读文件的形式

iOS中的XML是event-driven模式

1:打开一个xml文件,读取内容到NSData中

2:调用NSXMLParse的InitWithData方法,并设置代理tweetParser.delegate = self;

3:调用回调函数

注意:xml文件的第一个tag必须要顶格写!

1 
2
3
4
C++ Programming Language 5
Bjarne Stroustrup
6
1998
7
98.0
8
9
10
TCP/IP Illustrated 11
Richard Stevens
12
1996
13
56.0
14
15

  可以[NSXMLParser parserError]调用来得到错误的信息:

NSXMLParserErrorDomain error 4: //xml文件格式有问题(如上面)   NSXMLParserErrorDomain error 5: //打开文件失败

iOS 4.1中如果不显示实现NSXMLParseDelegate的话会有一条warning的提示,但是实行是没有问题的。

//开始解析前,可以做一些初始话的工作   - (void)parserDidStartDocument:(NSXMLParser *)parser {  }

 

//解析到一个开始tag,开始tag中可能会有properpies,例如
//所有的属性都储存在attributeDict中 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{    if ([elementName isEqual:@"book"]) 
{                NSString *catalog =  [attributeDict objectForKey:@"catalog"];            }    else if([bookTags containsObject:elementName])
{                  }      }

 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {    }    //处理到一个结束tag   - (void)parser:(NSXMLParser *)parser            didEndElement:(NSString *)elementName            namespaceURI:(NSString *)namespaceURI            qualifiedName:(NSString *)qName {    }    //xml解析结束   - (void)parserDidEndDocument:(NSXMLParser *)parser {    }

 

//例子,这里要特别注意的是dataWithContentsOfFile后面一定要根绝对路径,而NSBundle能根据文件名来得到这个绝对路径。   -(void) testXMLParse{        NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@"test.xml" ofType:nil inDirectory:nil];        NSData *fileData = [NSData dataWithContentsOfFile:xmlPath];        NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:fileData];        [xmlParser setDelegate:self];        BOOL result = [xmlParser parse];    if (!result) {            NSLog(@"The error is %@", [xmlParser parserError]);        }    //[xmlParser release];     }

转载于:https://www.cnblogs.com/pengyingh/articles/2342340.html

你可能感兴趣的文章
JavaScript 继承
查看>>
Android下ListView上下滑动背景变黑
查看>>
Guava Finalizer
查看>>
SharePoint 2013 页面访问,Url中间多一段"_layouts/15/start.aspx#"
查看>>
精品欣赏:30个养眼的精美自然风光的网站设计《上篇》
查看>>
知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法
查看>>
向大家介绍15个漂亮的Ubuntu GDM主题
查看>>
中国的程序员是世界上最好的程序员。他们不计报酬,没日没夜地工作。没有女朋友,没有节假日,可能几年后他们一无所有。他们仍在加班。...
查看>>
JavaScript:异步 setTimeout
查看>>
DIV+CSS圆角边框
查看>>
Mybatis的ResultMap的使用
查看>>
精选30道Java笔试题解答
查看>>
linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载
查看>>
IE回车的一个怪异行为
查看>>
Linux shell join命令详解
查看>>
SharePoint如何配置Ipad跳转等问题
查看>>
ASP.NET MVC 初体验
查看>>
js library
查看>>
mysql导出数据库数据及表结构
查看>>
C#设计模式——抽象工厂
查看>>