2013-04-01 69 views
0

此问题可以是重复的。但我无法为我的问题找到适当的答案。iOS - 解析后保存xml数据

我有下面的XML文件从服务器下载。

<INCIDENTTYPES> 
    <INCIDENT FORMNAME="first" TEXT="First incident"> 
     <TYPE>Type1</TYPE> 
     <TYPE>Type2</TYPE> 
     <TYPE>Type3 Tag</TYPE> 
     <TYPE>Type4 Tag</TYPE> 
     <LOCATION>Council</LOCATION> 
     <LOCATION>Domestic</LOCATION> 
     <LOCATION>Commercial</LOCATION> 
    </INCIDENT> 
    <INCIDENT FORMNAME="second" TEXT="Second incident"> 
     <TYPE>Second type</TYPE> 
     <TYPE>Second/first type</TYPE> 
     <TYPE>Second3</TYPE> 
     <LOCATION>Council</LOCATION> 
     <LOCATION>Domestic</LOCATION> 
     <LOCATION>Commercial</LOCATION> 
    </INCIDENT> 
</INCIDENTTYPES> 

我使用RaptureXML解析XML文件和解析可以如下完成。

RXMLElement *rootXML = [RXMLElement elementFromXMLData:self.connectionData];    
    [rootXML iterate:@"INCIDENT" usingBlock: ^(RXMLElement *incidents) { 

     if([[incidents attribute:@"FORMNAME"] isEqualToString:@"first"]){ 
      NSArray *listArray = [NSArray array]; 
      listArray = [incidents children:@"TYPE"]; 

      IncidentData *iData = [[IncidentData alloc] init]; 
      [iData.type setValue:listArray forKey:@"type"]; 

      NSData *data = [NSKeyedArchiver archivedDataWithRootObject:iData]; 
      [self.userDefault setObject:data forKey:@"firstObject"]; 
     } 
    } 

的IncidentData类,如下所示。

#import "IncidentData.h" 

    @implementation IncidentData 

    - (id)initWithCoder:(NSCoder *)aDecoder{ 
     if (self = [super init]) { 
//self.type is an array 
      self.type = [aDecoder decodeObjectForKey:@"type"]; 

     } 
     return self; 
    } 

    - (void)encodeWithCoder:(NSCoder *)aCoder{ 
     [aCoder encodeObject:self.type forKey:@"type"]; 
    } 

    @end 

我想加载数据如下。

NSData *dd = [self.userDefault objectForKey:@"firstObject"]; 

IncidentData *items = (IncidentData *)[NSKeyedUnarchiver unarchiveObjectWithData:dd]; 
NSArray *typeArray = [items.type objectAtIndex:0]; 
NSLog(@"Incident type : %@", typeArray); 

但是typeArray为null。

摘要:我试图解析远程XML文件并保存到磁盘的价值和使用的应用程序稍后阶段。

能否请你帮我在这?

回答

1

RaptureXML,RXMLElement可能不支持NSCoding。
尝试代:
listArray = [incidents children:@"TYPE"];
有:
listArray = [[incidents children:@"TYPE"] valueForKeyPath:@"text"];