如何将所有字典存储在一个数组中

3
我有一个包含国家和代码的XML文件,我已经将这个XML文件放在Demo.xml中。我的问题是只有第一个字典被保存了。或者有人可以告诉我其他解析方法,比如使用NSXML或GData。
NSString *filePath=[[NSBundle mainBundle] pathForResource:@"Demo" ofType:@"xml"];
NSData *data=[NSData dataWithContentsOfFile:filePath];
addArray=[[NSMutableArray alloc]init];
dictData=[[NSMutableDictionary alloc]init];


TBXML *tbxml = [TBXML tbxmlWithXMLData: data];
TBXMLElement *rootXMLElement=tbxml.rootXMLElement;

TBXMLElement *rootElemnt=[TBXML childElementNamed:@"root" parentElement:rootXMLElement];
while (rootElemnt!=nil) {

    TBXMLElement *item = [TBXML childElementNamed:@"item" parentElement:rootElemnt];

    if (item!=nil) {
        TBXMLElement *country = [TBXML childElementNamed:@"country" parentElement:item];
        TBXMLElement *code = [TBXML childElementNamed:@"code" parentElement:item];

        dictData=[NSMutableDictionary dictionaryWithObjectsAndKeys:[TBXML textForElement:country],@"country",[TBXML textForElement:code],@"code",nil];
        rootElemnt = [TBXML nextSiblingNamed:@"item" searchFromElement:rootElemnt];

        [addArray addObject:dictData];
    }
}
NSLog(@"====%@",addArray);

输出结果如下:

====(
        {
            code = 355;
            country = Albania;
        }
    )

这是 XML 的链接:https://www.dropbox.com/s/x4zpxgi42h0rllz/Demo.xml

为什么不使用plist而不是xml呢?有方便的方法可以将其转换为字典或数组。 - Inder Kumar Rathore
@InderKumarRathore- 是的,但是制作一个包含国家代码的 plist 将是一项冗长的任务。 - Sakshi Singh
Sakshi,只需要使用查找和替换命令,就用了3分钟将其更改为plist。你知道如果你将数据文件作为plist而不是xml使用,那么plist就只是xaml,你会发现事情变得多么容易。顺便说一句,你可以从这里下载你的plist - Inder Kumar Rathore
@InderKumarRathore-谢谢,这是我学会的将XML文件转换为.plist的新技能。 - Sakshi Singh
1个回答

2

尚未测试,但

NSString *filePath=[[NSBundle mainBundle] pathForResource:@"Demo" ofType:@"xml"];
NSData *data=[NSData dataWithContentsOfFile:filePath];
addArray=[[NSMutableArray alloc]init];
dictData=[[NSMutableDictionary alloc]init];


TBXML *tbxml = [TBXML tbxmlWithXMLData: data];
TBXMLElement *rootXMLElement=tbxml.rootXMLElement;

TBXMLElement *rootElemnt=[TBXML childElementNamed:@"root" parentElement:rootXMLElement];
if (rootElemnt) {
    TBXMLElement *item = [TBXML childElementNamed:@"item" parentElement:rootElemnt];

    while (item) {

        TBXMLElement *country = [TBXML childElementNamed:@"country" parentElement:item];
        TBXMLElement *code = [TBXML childElementNamed:@"code" parentElement:item];

        dictData=[NSMutableDictionary dictionaryWithObjectsAndKeys:[TBXML textForElement:country],@"country",[TBXML textForElement:code],@"code",nil];

        [addArray addObject:dictData];
        item = [TBXML nextSiblingNamed:@"item" searchFromElement:item];
    }
}
NSLog(@"====%@",addArray);

应该可以工作


rootElemnt = [TBXML nextSiblingNamed:@"item" searchFromElement:rootElemnt]; 将始终返回nil,因为item不是rootElemnt的兄弟节点。 - Jerome Diaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接