Xcode:XML解析器分组

时间:2012-09-12 18:14:32

标签: xml xcode

我想要实现的目标如下。我有一个MySQL数据库,并在PHP脚本中使用SimpleXML将条目转换为XML。所以我有'id','部门','名字','tel'和'email'字段。 PHP将其解析为此输出(不知道这是否是最合理的输出,但似乎是合法的)(主要唯一键'id'已被忽略)

<?xml version="1.0" encoding="UTF-8" ?>
<entries>
<entry>
<department>DeptA</department>
<name>NameA</name>
<tel>0000-111111</tel>
<email>namea@abc.com</email>
</entry>
<entry>
<department>DeptB</department>
<name>NameB1</name>
<tel>0000-2222222</tel>
<email>nameb1@abc.com</email>
</entry>
<entry>
<department>DebtB</department>
<name>NameB2</name>
<tel>0000-2222223</tel>
<email>nameb2@abc.com</email>
</entry>

more entry

</entries>

所以我在Xcode中有三个视图。 First View(MasterViewController)应将部门报告为唯一值。在上面的XML DebtA和DebtB中。 (更多在实际的XML中)并将它们列在表视图中。尝试使用NSSlist * uniqueArray(等)做到这一点但没有成功。然后在单击MasterViewController中的某个部门时,您将转到DebtViewController,其中列出了在该特定部门工作的所有员工的姓名。所以DebtB应该是NameB1和NameB2。 (DebtA只有NameA)。最后一个视图是一个DetailViewController,其中列出了在DebtViewController中单击的特定名称的详细信息。详细信息,如姓名,电话和电子邮件。 (当我掌握它时,也许是一张照片)

具体而言,事情是我已经挣扎了好几天,想知道我应该采取什么样的最佳路线。我目前正在使用XML来完成我想要实现的任务吗?我应该在解析xcode之前用XML将各部门组合在一起吗?或者之后可以这样做吗?如果是这样,请提出一些建议。

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上 - 基于你想要做的事情,我建议将xml文件格式化为:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">

<plist version="1.0">

<dict>

   <key>DeptA</key>

         <array>

            <dict>

               <key>Name</key>

               <string>NameA</string>

               <key>tel</key>

               <string>0000-111111</string>

               <key>email</key>

               <string>namea@abc.com</string>

            </dict>

         </array>

   <key>DeptB</key>

         <array>

            <dict>

               <key>Name</key>

               <string>NameB1</string>

               <key>tel</key>

               <string>0000-222222</string>

               <key>email</key>

               <string>nameb1@abc.com</string>

            </dict>

            <dict>

               <key>Name</key>

               <string>NameB2</string>

               <key>tel</key>

               <string>0000-222223</string>

               <key>email</key>

               <string>nameb2@abc.com</string>

            </dict>

         </array>

</dict>

它比你到目前为止要复杂得多,但这允许你通过这样的方式直接将文件内容读入NSDictionary对象:

NSDictionary * departmentDictionary = [[NSDictionary alloc] initWithContentsOfFile:"/path/to/xml/file.xml"];

完成后,您可以通过执行以下操作获取表示部门名称的字符串列表:

NSArray * departmentList = [departmentDictionary allKeys];

这一行将为您提供DeptB中所有员工的列表:

NSArray * deptBEmployees = [departmentDictionary objectForKey:@"DeptB"];

员工列表以NSDictionary对象数组的形式返回,每个对象都存储了键@“Name”,@“tel”和@“email”的值。

正如您所看到的,它确实变得有点复杂,但相信我 - 一旦掌握了它,就可以很容易地存储和读取非常复杂的xml数据。 MacOS甚至还有一个属性列表编辑器,它为创建可由XCode读取的此类型的xml文件提供了一个很好的界面。

我推荐这个链接 - 当我学习做这类事情时,它对我很有帮助: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html#//apple_ref/doc/uid/10000048-CJBGDEGD