iphone - iOS - 解析后保存xml数据

标签 iphone ios xml xml-serialization nskeyedarchiver

这个问题可能是重复的。但我无法为我的问题找到正确的答案。

我从服务器下载了以下 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 为空。

摘要:我正在尝试解析远程 xml 文件并将值保存到磁盘上并使用应用程序的后续阶段。

你能帮我解决这个问题吗?

最佳答案

RaptureXML、RXMLElement 可能不支持 NSCoding。
尝试替换:
listArray = [事件子项:@"TYPE"];
与:
listArray = [[事件子项:@"TYPE"] valueForKeyPath:@"text"];

关于iphone - iOS - 解析后保存xml数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15746878/

相关文章:

ios - 如何在 Swift 中传入一个 nil 通知变量

ios - Setter 无法在 Swift 中工作

c# - 如何从 web.config 中读取嵌套的配置元素?

c# - 目标项目没有 app.config 时的 NuGet app.config XDT

ios - 无法在 iPad (iOS 7) 上自动(或强制)关闭键盘

iphone - 如何显示 map 并获取中心坐标 - 纬度和经度?

ios - 从 URL 解析和加载 XML 数据

php - 从 xml 文件中选择全部,其中 person ='Bob'

iphone - 从 plist 文件中读取数据

iphone - 如何从另一个类设置 UILabel 文本