background image

iOS 中的 XML 处理

解析不是

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

如果

url 中有中文:

[cpp:nogutter] view plain

copy

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:0×80000632];
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 的提示,但是实行

是没有问题的。