解析XML数据或转换为NSDictionary?
问题描述:
我有从服务器检索到的XML数据,我需要删除它的一些部分,以设置我的tableview。我将这些数据转换为NSDictionary,但是我认为解析(这是正确的词?)xml数据可能更容易,而不是在它已经转换后进行混淆。这里是一个xml数据的例子。解析XML数据或转换为NSDictionary?
<?xml version="1.0" encoding="UTF-8"?>
<response status="ok">
<rosters records_per_page="50" page_count="1" page="1" total_record_count="11">
<roster class_id="685343" role="T" user_id="968428" roster_id="16257539">
<class name="Haiku API Keys" shortname="haiku_api" end_date="2011-12-20" code=""
import_id="" id="685343" description="" teacher_id="971456" year="2012"
organization_id="134146" active="false"/>
</roster>
<roster class_id="512296" role="S" user_id="968428" roster_id="10456326">
<class name="Physics AP" shortname="physics-ap_0406-01" end_date="2012-05-02"
code="PHYSICSA_0406-01" import_id="0406-01-2012" id="512296" description="DESCRIPTION"
teacher_id="968968" year="2012" organization_id="134148" active="true"/>
</roster>
我想要做的是删除对象“false”的数据,对于“激活”键。这将使我的物理AP的类名称的数据。这可能与XML数据做,或者我应该尝试删除这些数据一旦它是一个NSDictionary?这是转换后的NSDictionary的样子。
XML数据进行格式化(
{
response = {
"@status" = ok;
rosters = {
"@page" = 1;
"@page_count" = 1;
"@records_per_page" = 50;
"@total_record_count" = 11;
roster = (
{
"@class_id" = 685343;
"@role" = T;
"@roster_id" = 16257539;
"@user_id" = 968428;
class = {
"@active" = false;
"@code" = "";
"@description" = "";
"@end_date" = "2011-12-20";
"@id" = 685343;
"@import_id" = "";
"@name" = "Haiku API Keys";
"@organization_id" = 134146;
"@shortname" = "haiku_api";
"@teacher_id" = 971456;
"@year" = 2012;
};
},
{
"@class_id" = 512296;
"@role" = S;
"@roster_id" = 10456326;
"@user_id" = 968428;
class = {
"@active" = true;
"@code" = "PHYSICSA_0406-01";
"@description" = "DESCRIPTION";
"@end_date" = "2012-05-02";
"@id" = 512296;
"@import_id" = "0406-01-2012";
"@name" = "Physics AP";
"@organization_id" = 134148;
"@shortname" = "physics-ap_0406-01";
"@teacher_id" = 968968;
"@year" = 2012;
};
},
}
就用这种方式让我觉得它会更容易通过解析它来完成,但我不知道这是否是可能的,或者用了什么方法。如果您有办法通过使用xml数据或NSDictionary来完成此任务,我很乐意听到它。谢谢你的帮助。
答
我使用了你用过的相同的XMLReader,而且我喜欢它。
如果我是来解决问题,这是我的解决方案,你有你只需要创建词典的新数组字典后,具体名单的新数组,像这样:
NSArray *roster = [[[theDictionary objectForKey:@"response"] objectForKey:@"rosters"] objectForKey:@"roster"];
NSMutableArray *newRoster = [[NSMutableArray alloc] init];
for(int i=0;i<[roster count];i++){
NSDictionary *aRoster = [roster objectAtIndex:i];
//filter the array and add it to the mutable array
if([[[aRoster objectForKey:@"class"] objectForKey:@"@@active"] isEqualToString:@"true"])
{
//this way we only add those data whose active is "true"
[newRoster addObject:aRoster];
}
}
//do what you want with the new roster
NSLog(@"newRoster = %@",newRoster);
在这种情况下,我只是假设你只打算使用“roster”标签数组,而你想删除那些“active”属性等于字符串“false”的标签。
当你完成它时,不要忘记发布newRoster。
XMLReader可以是相当繁琐的,当涉及到属性的工作,纠正我,如果我有一些错误,因为我没有MAC今天使用
答
如果你是新来的xml解析在目标c我建议你使用TBXML(http://tbxml.co.uk/)库..解析你的xml使用这个库,并存储你想要在数组中的什么内容或字典(留下你不想要的)..并使用数组或字典来创建你的表..
你好,欢迎来到*!下一次,在发布之前,请查看关于语法和代码格式指南的常见问题解答,因为在*中我们赞赏并期待这些指导。 –
谢谢,为我工作 – davis