从xml文档中获取特定对象

时间:2014-02-06 08:16:47

标签: ios objective-c xml

我正在尝试从xml文档创建一个数组。问题是我只想获得id等于passedID的对象。这是来自前一个viewcontroller的id。我该如何实现呢?

我创建了这个,它给了我所有的短语对象。

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString* path = [[NSBundle mainBundle] pathForResource: @"lists" ofType: @"xml"];
    NSData* data = [NSData dataWithContentsOfFile: path];

    rows = [[NSMutableArray alloc] init];



    NSXMLParser* parser = [[NSXMLParser alloc] initWithData: data];

    [parser setDelegate:self];
    [parser parse];


// Do any additional setup after loading the view.
}


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    if ([elementName isEqualToString:@"phrase"]) {
        translation = attributeDict[@"translation"];
        meaning = attributeDict[@"meaning"];
        pronounce = attributeDict[@"pronounce"];
        theId = attributeDict[@"id"];

        NSArray *cols = @[translation, meaning, pronounce, theId ];

        [rows addObject: cols];



    }

}

1 个答案:

答案 0 :(得分:0)

您的rows数组包含数据数组。这相当低效且不易维护。使用一组字典或自定义对象可以更好地服务。这意味着按键/名称访问数据更明显,更容易。它也更准确。

目前,您可以使用谓词来检查所需的id是否为行数组IN。但是你可能会遇到与其他物体的碰撞。

如果您更改为字典或自定义对象(您确实应该),那么您可以在谓词中显式使用该键:

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"theId == %@", id];
NSArray *requiredRows = [rows filteredArrayUsingPredicate:filterPredicate];