如何对从 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 数组项进行排序?

XML数据如何进行解析呢,方式有哪些?

如何通过D3.js中的JSON文件解析按键对对象进行排序[重复]

如何按字母顺序对 DBML 对象进行排序?

如何对从 AJAX 请求中获取的响应进行排序并将它们作为 <option> 映射到 <select> 标记?

xml解析