如何对从 XML 解析的对象进行排序
Posted
技术标签:
【中文标题】如何对从 XML 解析的对象进行排序【英文标题】:How sort objects parsed from XML 【发布时间】:2010-10-15 09:30:51 【问题描述】:所以我想解析一个 xml 并根据“课程”按升序显示(在 UITableView 中)“主题”
XML:
<parfumeo_kkn>
<tt_timetable>
<id>1015</id>
<day>1</day>
<class_id>98</class_id>
<lesson>9</lesson>
<teacher>bt</teacher>
<room>V1.2</room>
<subject>M</subject>
<pr_id>54</pr_id>
</tt_timetable>
<tt_timetable>
<id>1014</id>
<day>1</day>
<class_id>98</class_id>
<lesson>8</lesson>
<teacher>bt</teacher>
<room>V1.2</room>
<subject>bg</subject>
<pr_id>54</pr_id>
</tt_timetable>
等。
(在这个小例子中,“M”之前会有“bg”。)我已经设置了我的解析器,但它没有按照我想要的顺序工作。 谢谢帮助
【问题讨论】:
当回调调用每个开始元素时,您检查特定元素类型,您的案例将是课程和相应的主题。将这些对放入字典中,您可以将其添加到某个容器中。以后你可以根据自己的意愿使用它。 感谢您的帮助。但是:我得到的只是: 课 = "9\n 8\n 11\n 11\n 10\n 10\n 5\n 4\n 3\n 2\n 1\n ";主题 = "bg\n bg\n CAE\n CAE\n CAE\n CAE\n Gg\n G\n G\n M\n M\n "; 而且现在只有1个单元格被整个数组填充了.. ^^我应该认真放弃它^^ 【参考方案1】:您应该将解析器的逻辑与在表格视图中显示结果的方式分开。解析器只完成解析 xml 的任务,表格视图的控制器将通过使用 NSSortDescriptor 对解析器的结果进行排序来完成一些额外的任务,示例如下:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lesson" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
是的,之前我假设您使用的是 Core Data,如果您只有一个普通数组,那么您可以简单地调用:
NSArray *myArray = [xmlResultArray sortedArrayUsingDescriptors:sortDescriptors];
现在您可以使用 myArray 填充到您的表格视图控制器。
希望这会有所帮助!
【讨论】:
他假设你正在使用核心数据。 非常感谢..但仍然无法正常工作..我把你的行放在 -(void)parserDidEnddocument: NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"lesson" ascending:YES]autorelease ]; NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; [故事 sortedArrayUsingDescriptors:sortDescriptors];也许我弄错了,但我的输出保持不变.. 嗨 dav3,请参阅我编辑的答案。您必须使用调用 sortedArrayUsingDescriptors 的结果来填充表视图。我以为你知道,抱歉。 感谢 sfa... 我只是重新定义了我的数组,而不是使用新数组... resultArray = [resultArray sortedArrayUsingDescriptors:sortDescriptors];不知道这是否聪明,但它有点工作.. 不客气!考虑接受答案,因为它会让其他人知道您的问题的答案在哪里!【参考方案2】:也许,您可以解析您的 XML 文件,将对象放入一个数组中,然后对该数组进行排序?
NSArray *myArray = [parser parseTheFile:file];
[self sortTheArray:myArray];
【讨论】:
刚才的反应比我的好。 =) 但我也想感谢你...不幸的是我太笨了,无法正确使用它.. :-/【参考方案3】:要对数组进行排序,您只需这样做。
NSArray *sortedPairs = [originalArray sortedArrayUsingSelector:@selector(compare:)];
如果你有一本字典并想通过键获得一个排序数组,你会
NSArray *arr = [dictionary keysSortedByValueUsingSelector:@selector(compare:)];
一旦你有了你的数组,你就可以随心所欲地枚举。
【讨论】:
以上是关于如何对从 XML 解析的对象进行排序的主要内容,如果未能解决你的问题,请参考以下文章
如何以交替顺序对两个不同对象列表的 XML 数组项进行排序?
如何通过D3.js中的JSON文件解析按键对对象进行排序[重复]