2011-05-27 63 views
0

我正在替换一个简单的initWithContentsOfURL:用动态HttpGet传递两个参数,并且该网页返回与XML文本格式完全相同的数据。Http获取XML格式的plist到数组或文件,然后到数组?

我真的必须解析数据才能把它存入一个字典数组吗?我希望获得NSXMLParser的initWithData:然后用一些自动的方式初始化一个带有所有节点的NSArray,遵循XML。 (这是一个XML格式的plist,所以它的结构和所有键名都已经存在了,为什么我还得写Objective-C中所有的副本?)

我很高兴与httpgetting到一个文本文件,然后NSArray initWithContentsOfFile。

编辑:这会产生一个大小为26K的NSData对象,但错误消息“字符串转换失败,字符串为空”。

//Initiate connection 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:url(aspurl)]; 
[request setHTTPMethod:@"GET"]; 
    //keep adding your headers this way 
NSString *accept = [NSString stringWithFormat:@"application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,/*;q=0.5"]; 
[request addValue:accept forHTTPHeaderField: @"Accept"]; 
    //send request & get response 
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

NSString *errString; 
NSMutableArray *arr=[NSPropertyListSerialization propertyListFromData:returnData 
             mutabilityOption:NSPropertyListMutableContainers 
                format: NULL 
          errorDescription:&errString]; 

if (errString) 
{ 
    NSLog(@"%@",errString); 
    [errString release]; // exception to the rules 
} 

这给出错误“字符串转换失败,字符串为空”。而arr是0x0。

任何人都可以指出我的错误吗?

+0

如果您需要轻松解析,从而导致字典和数组,并且您可以对API进行更改,请使用json框架使用JSON。 – 2011-05-27 07:25:38

回答

1

首先,您可以使用类似XML-to-NSDictionary的类来进行解析,并且它可能很简单,但似乎您不喜欢这种方法。

由于正在处理一个plist中,作为替代,可以:

  1. 使用NSURLConnection到plist中加载到一个NSData;
  2. 使用[NSPropertyListSerialization propertyListFromData:mutabilityOption:format:errorDescription:method]将其转换为NSDictionary/NSArray;

也看看Property List Programming Guide

+0

谢谢。试过#2。你能在我编辑的原文中发现错误吗? – 2011-05-27 12:50:53

+0

@Henrik:你的代码对我来说似乎没问题;唯一可能与数据。我会尝试将NSData转换为NSString并检查其内容:'NSString * content = [[[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding] autorelease];' – sergio 2011-05-27 13:08:50

+0

在Safari中粘贴相同的URL,source-> XML验证器,no发现错误。通常,如果initWithContentsofURL出现错误(我用plist-xml _files_完成了很多次),您会得到一个空对象,但它在这个应用程序中使用了相同的数据。也许NSURLRequest的行为不一样,但如果这是主角,则代码内容为(null)。 – 2011-05-27 13:26:20