我目前正在尝试将一些xml数据解析为NSDictionary
。这是我第一次尝试这样的事情而且对我正在做的事情有点不确定,
首先,我正在解析一些看起来大致相似的XML -
<Rows>
<Row ID="76" MANF="JARD" ISMANUF="F" ISSER="F"/>
<Row ID="38" MANF ="SANBIN" ISMANUF ="F" ISSER ="T"/>
<Rows>
我正在使用NSXMLParser
代表,因此请使用NSLog
NSLog(@"attributes: %@", attributeDict);
parser:didStartElement:namespaceURI:qualifiedName:attributes:
委托方法,我的输出如下所示。
}
2011-10-11 08:01:15.472 Code[526:207] attributes: {
ISMANUF = F;
ISSER = T;
MANF = smart;
ID = 74;
}
2011-10-11 08:01:15.472 Code[526:207] attributes: {
ISMANUF = F;
ISSER = T;
MANF = "weather guard";
ID = 71;
}
我现在正在寻找将这些内容解析为NSMutableDictionary
,但我并不确定如何解决这个问题......我希望做这样的事情
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"row"]) {
myDic = [[myDic alloc] init];
myDic.isManuf = [attributeDict objectForKey:@"ISMANUF"];
myDic.isSer = [attributeDict valueForKey:@"ISSER"];
myDic.Manf = [attributeDict valueForKey:@"MANF"]
myDic.id = [attributeDict valueForKey:@"ID"]
}
}
我的问题看起来似乎正确吗?然后,如果是这样,我如何在头文件中声明这个可变字典?以及如何为此NSMutableDictionary
声明.isManuf .isSer .Manf .id
答案 0 :(得分:1)
您必须区分NSObject
和NSMutableDictionary
的子类。
你写它的方式,它看起来是一个具有一些属性的对象。如果你的XML rows
总是包含相同的字段,我认为这是最好的方法。您的对象的属性自动“可变”,因此从这一方面无需担心。
最好使用自定义对象,因为错误拼写错误的可用性较低,而且代码通常更具可读性。
所以你仍然需要了解如何声明你的对象:
MyDic.h:
@interface MyDic : NSObject {
BOOL isManuf;
BOOL isSer;
NSString *manf;
NSUInteger id;
}
@property (nonatomic, assign) BOOL isManuf;
@property (nonatomic, assign) BOOL isSer;
@property (nonatomic, retain) NSString *manf;
@property (nonatomic, assign) NSUInteger id;
@end
MyDic.m
@implementation MyDic
@synthetize isManuf, isSer, manf, id;
-(void)dealloc {
[manf release];
[super dealloc];
}
@end
不要忘记在主类中导入自定义对象,并在创建对象时使用类名(带首字母大写)。
#import "MyDic.h"
....
myDic = [[MyDic alloc] init];
...
答案 1 :(得分:0)
你不想在字典上使用.isManuf,.isSer等...
你可以: