IOS 对XML的处理
来源:互联网 发布:白夜追凶结局知乎 编辑:程序博客网 时间:2024/06/06 17:11
解析不是utf-8的xml文件(尤其是中文网站的rss文件):
如果url中有中文:
- const char *str = [searchURL UTF8String];
- NSString *url = [NSString stringWithUTF8String:str];
- url = [url stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
- NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
gbk编码的xml文件:
- NSString *xmlStr = [[NSString alloc] initWithData:inData encoding:0x80000632];
- NSString *newXMLStr = [xmlStr stringByReplacingOccurrencesOfString:@"encoding=/"gbk/"" withString:@"encoding=/"UTF-8/""];
- NSXMLParser *nextParser = [[NSXMLParser alloc] initWithData:[newXMLStr dataUsingEncoding:NSUTF8StringEncoding]];
在iOS中解析XML
- 以读文件的形式
iOS中的XML是event-driven模式
step-1:打开一个xml文件,读取内容到NSData中
2:调用NSXMLParse的nitWithData方法,并设置代理tweetParser.delegate = self;
3:调用回调函数
注意:xml文件的第一个tag必须要顶格写!
- <?xml version="1.0" encoding="UTF-8"?>
- <bookstore>
- <book catalog="Programming">
- <title lang="en">C++ Programming Language</title>
- <author>Bjarne Stroustrup</author>
- <year>1998</year>
- <price>98.0</price>
- </book>
- <book catalog="Networking">
- <title lang="en">TCP/IP Illustrated</title>
- <author>Richard Stevens</author>
- <year>1996</year>
- <price>56.0</price>
- </book>
- </bookstore>
可以[NSXMLParser parserError]调用来得到错误的信息:
NSXMLParserErrorDomain error 4: xml文件格式有问题(如上面)
NSXMLParserErrorDomain error 5: 打开文件失败
在iOS4.1中如果不显示实现NSXMLParseDelegate的话会有一条warning的提示,但是实行是没有问题的。
//开始解析前,可以做一些初始话的工作
- - (void)parserDidStartDocument:(NSXMLParser *)parser {
- }
//解析到一个开始tag,开始tag中可能会有properpies,例如<book catalog="Programming">
//所有的属性都储存在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]){
- }
- }
//这时处理例如<title lang="en">C++ Programming Language</title>的情况
- - (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];
- }
0 0
- IOS 对XML的处理
- SQL2005对XML的处理
- 关于对XML的处理
- IOS对dealloc的处理
- ios 对图片的处理
- XML中对特殊符号的处理
- Java里面对XML文档的处理
- XML中对特殊符号的处理
- 对xml的处理_Dom4j入门一
- 对xml的处理_Dom4j入门二
- 对xml的处理_Dom4j入门三
- 对xml的处理_Dom4j入门四
- 对xml的处理_Dom4j入门五
- 对xml的处理_Dom4j入门六
- SQL对XML类型数据的处理
- SQL2005对XML的处理功能讲解
- QT中对XML的处理
- DOM对XML的解析处理
- android之Intent传递复杂数据时的注意事项
- linux 内存 练习 1
- JavaScript Source Map 详解
- 安装oracle报 Xlib: No protocol specified 错误
- linux 内存 练习 2
- IOS 对XML的处理
- osx中使用navicat连接sqlserver查看functions中的存储过程的内容时无法显示的问题
- linux 内核 练习 3
- 图的创建BFS DFS
- 主从库同步耗时查询
- UIImageJPEGRepresentation和UIImagePNGRepresentation
- 自己动手写Java大整数《1》表示与加减
- bzoj1968: [Ahoi2005]COMMON 约数研究
- 使用ALAssetsLibrary读取所有照片