将NSArrays添加到NSDictionary

时间:2011-02-11 04:35:49

标签: iphone ios nsarray nsdictionary xml-parsing

我正在解析格式为:

的XML文件

**注意:这是XML的一个非常简化的版本。共有11个部门,总共87个部门

<division>
    <name> Sciences </name>
    <departments>

        <department>
            <name> Computer Science </name>
        </department>

        <department>
            <name> Biology </name>
        </department>

        <department>
            <name> Chemistry </name>
        </department>

    </department>
</division>

我希望做的是在UITableView中显示此信息,其中分区名称为Sections,每个相应部分中的部门名称。

我有一个名为divisionDict的NSDictionary,我想为每个分区存储NSArrays;包含部门。我还有一个名为departmentArray的NSMutableArray,它包含每个部门。基本上,我想要一个用departmentArrays填充的divisionDict。

这是我解析XML的代码,它完美无缺,我只是在字典中存储单独的数组时遇到了麻烦。当它现在通过解析时,我尝试用关键的“科学”打印出数组中的元素,它会打印每个部门的部门,而不仅仅是科学。

if(node_divisions)
{
    node_division = [TBXML childElementNamed:@"division" parentElement:node_divisions]; 

    while (node_division) 
    {
        node_divisionName = [TBXML childElementNamed:@"name" parentElement:node_division];];
        node_departments = [TBXML childElementNamed:@"departments" parentElement:node_division];
        node_department = [TBXML childElementNamed:@"department" parentElement:node_departments];
        divisionName = [TBXML textForElement:node_divisionName];
        while(node_department)
        {
            node_departmentName = [TBXML childElementNamed:@"name" parentElement:node_department];
            departmentName = [TBXML textForElement:node_departmentName];
            //add the department name to the array
            [departmentArray addObject:departmentName];

            node_department = node_department->nextSibling;
        }
        //add the departmentArray to the dictionary, using the division name as the key
        [divisionDict setObject:departmentArray forKey:divisionName];;
        node_division = node_division->nextSibling;
    }
}

非常感谢任何帮助!我知道它很简单我可能会遗漏,但我现在已经看了太多时间而且我看不到它。如果您需要任何其他信息,请告诉我,我试着详细解释一切。

此外,这是一张希望有助于展示我想要描述的内容的图片: http://i.stack.imgur.com/a9nSb.png

1 个答案:

答案 0 :(得分:2)

看起来您正在将每个部门的所有部门添加到同一个阵列中。我想你只需要为循环中的每个分区创建一个新数组:

while (node_division) 
{
    departmentArray = [NSMutableArray array]; //add this line