2013-12-20 53 views
1

我想创建一个iOSapp应该从网上的XML文件加载配置文件,检查重复项并删除它们。我使用NSXMLParser解析XML文件中的配置文件,但现在我对如何检查重复项感到困惑。消除的配置文件应显示在UITableView中。iOS应用程序检查重复的配置文件

任何想法或帮助,将不胜感激!

<profiles> 

    <profile> 
    <firstname>Amin</firstname> 
    <lastname>Ziarkash</lastname> 
    <address>Melisstokelaan</address> 
    <zipcode>2541GH</zipcode> 
    <city>DenHaag</city> 
    <email>[email protected]</email> 
    </profile> 

    <profile> 
    <firstname>Niko</firstname> 
    <lastname>DeVries</lastname> 
    <address>Sterrelaan</address> 
    <zipcode>3342JH</zipcode> 
    <city>Amsterdam</city> 
    <email>[email protected]</email> 
    </profile> 

    <profile> 
    <firstname>Marcel</firstname> 
    <lastname>Janssens</lastname> 
    <address>Voorhoeveweg</address> 
    <zipcode>6006SV</zipcode> 
    <city>Weert</city> 
    <email>[email protected]</email> 
    </profile> 

    <profile> 
    <firstname>Amin</firstname> 
    <lastname>Ziarkash</lastname> 
    <address>Melisstokelaan</address> 
    <zipcode>2541GH</zipcode> 
    <city>DenHaag</city> 
    <email>[email protected]</email> 
    </profile> 

</profiles> 
+0

使用'NSSet'来消除dup licates。 –

+0

@βhargavḯ我明白NSSet不会显示重复内容,但我的意思是如何获取NSSet将在最后显示的NSArray中显示的XML内的配置文件。或者,我如何将上面的XML配置文件转换为一个对象,然后我可以使用它放入一个NSArray? –

回答

1

尝试这样解析您的XML,一旦你再解析相应地过滤它: -

-(IBAction)test:(id)sender 
{ 
    self.mutableArr=[[NSMutableArray alloc]init]; 
    NSURL *url = [[NSURL alloc]initWithString:@"file:///Users/XYZ/Desktop/test.xml"];//this is your xml file url 
    NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url]; 
    [parser setDelegate:self]; 
    BOOL par=[parser parse]; 
    NSLog(@"par=%d",par); 
} 


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 

      if ([elementName isEqualToString:@"firstname"]) 
      { 
       self.elementNm=elementName; 
      } 
     if ([elementName isEqualToString:@"lastname"]) 
     { 
      self.elementNm=elementName; 
     } 
    if ([elementName isEqualToString:@"address"]) 
    { 
     self.elementNm=elementName; 
    } 
    if ([elementName isEqualToString:@"zipcode"]) 
    { 
     self.elementNm=elementName; 
    } 
    if ([elementName isEqualToString:@"city"]) 
    { 
     self.elementNm=elementName; 
    } 
    if ([elementName isEqualToString:@"email"]) 
    { 
     self.elementNm=elementName; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
      { 
       if ([elementName isEqualToString:@"profiles"]) 
       { 
        NSLog(@"rootelement end"); 
       } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if ([string rangeOfString:@"\n"].location== NSNotFound) 
    { 
    if (string.length > 0) 
    { 
     self.mutableDict=[[NSMutableDictionary alloc]init]; 
     [self.mutableDict setObject:string forKey:self.elementNm]; 
     [self.mutableArr addObject:self.mutableDict]; 

    } 
    } 
} 

//Now filtered you array after parsing xml 
-(IBAction)filterArray:(id)sender 
{ 
    for (NSMutableDictionary *dict in self.mutableArr) 
    { 
     if ([dict objectForKey:@"zipcode"]) 
     { 
     NSPredicate *pd=[NSPredicate predicateWithFormat:@"(zipcode == %@)", [dict objectForKey:@"zipcode"]]; 
     [self.mutableArr filterUsingPredicate:pd]; 
     } 
    } 
} 
+0

感谢您的帮助!现在说,如果我想要一个按钮来显示在tableView中的XML配置文件,每个配置文件在一个单独的tableViewCel我怎么会去?检查上面添加的IBAction(showProfiles)。 –

+0

你的意思是说,在每个tableview单元中你想显示父级配置文件和他们的孩子到配置文件内的内容?? –

+0

是的,这就是我的意思。 –