如何在iphone上读入和解析XML文件?

时间:2010-01-19 22:25:25

标签: iphone xml web-services

我有一个Web服务器,它返回一个XML文件。让我们说http://www.foo.bar/foo.php?wantXML=1

如何从服务器获取该文件,然后解析它以访问数据?我想我必须生成一个新线程并在后台完成整个操作以阻止UI?我必须看哪些课程?

4 个答案:

答案 0 :(得分:1)

您可以尝试:

  • 字符串操作
  • XPATH
除了最简单的情况之外,

Id选择xpath - 即使在那些情况下,你也不能反对xpath。我不确定这些库,但我知道libXML是用C语言编写的,并且支持在iphone上。

对于字符串操作,您可以使用NS *系列方法。(substringFromIndex,substringToIndex等) 不要忘记:http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html

Big Nerd Ranch,'在Cocoa中解析XML':http://weblog.bignerdranch.com/?p=48

答案 1 :(得分:1)

我使用了两种方法:NSXMLParser用于简单文件和小文件,libxml用于大文件。但是像TouchXML这样的库也可以简化这个过程。

基本上,如果你有一个小数据集,在内存中DOM处理可以正常工作。但是在像iPhone这样的设备中,你最好使用基于SAX的解析器,比如libxml2。

当您需要加载数据时:

[self performSelectorInBackground:@selector(LoadYourData) withObject:nil];

不会阻止主UI线程。

对于libxml2,您需要实现C回调来处理来自NSURLConnection的数据块。

答案 2 :(得分:1)

要通过http下载XML或其他内容,我建议您使用ASIHTTPRequest

请随意查看我创建的方便类,以解析简单的XML文档,就像从Nike +中获取的那样。 Link

基本上用法如下

NameValueParser *parser = [NameValueParser parser];
[parser addFieldName:@"screenName"]; // Name
[parser addFieldName:@"rank"];       // Position
[parser addFieldName:@"progress"];   // Distance
[parser parseData:data];

NSLog(@"%@", [parser list]); // Lets see what we got

答案 3 :(得分:1)

来自Apple的

SeismicXML sample正是您所寻找的。