从Objective-C中的XML id号返回NSMutableArray的计数?

从Objective-C中的XML id号返回NSMutableArray的计数?,objective-c,xml,arrays,count,nsmutablearray,Objective C,Xml,Arrays,Count,Nsmutablearray,我正在用XML文件构建一个NSMutableArray,需要返回XML文件中每个常驻id的计数。有可能这样做吗 <residents> <resident id="1"> <name> <first>Daffy</first> <last>Duck</last> </name> </resident> <resident id="2"

我正在用XML文件构建一个NSMutableArray,需要返回XML文件中每个常驻id的计数。有可能这样做吗

<residents>
<resident id="1">
    <name>
        <first>Daffy</first>
        <last>Duck</last>
    </name>
</resident>

<resident id="2">
    <name>
        <first>Mickey</first>
        <last>Mouse</last>
    </name>
</resident>
有什么建议吗

对于数组,在我的AppDelegate.h中,我有:

    @interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    UIWindow *window;
    UINavigationController *navigationController;

    NSMutableArray *residents; 
}


@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) NSMutableArray *residents;
@接口AppDelegate:UIResponder
{
UIWindow*窗口;
UINavigationController*导航控制器;
NSMutableArray*驻留;
}
@属性(强,非原子)UIWindow*window;
@属性(非原子,保留)IBuinavigationController*导航控制器;
@属性(非原子,保留)NSMutableArray*驻留;
在XMLAppDelegate.h中,我使用:

    @interface XMLAppDelegate : NSObject <UIApplicationDelegate> {

    UIWindow *window;
    UINavigationController *navigationController;

    NSMutableArray *residents;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) NSMutableArray *residents;

@end
@接口XMLAppDelegate:NSObject{
UIWindow*窗口;
UINavigationController*导航控制器;
NSMutableArray*驻留;
}
@属性(非原子,保留)IBUIWindow*window;
@属性(非原子,保留)IBuinavigationController*导航控制器;
@属性(非原子,保留)NSMutableArray*驻留;
@结束

您需要使用NSXMLParser(分别是NSXMLParserDelegate和NSXMLParserDelegate)并正确地将XML数据解析到NSMutableArray中,然后才能进行计数。此外,要存储日常生活中的XML数据,您可能需要将信息放入NSMutableDictionary中

在.h@接口中,您需要创建IVAR(仅示例):

当然,还要设置委托方法,将XML文档解析到NSMutableArray中:

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

  currentElement = nil;
  currentElement = [elementName copy];
  if ([elementName isEqualToString:@"day"]) {
    firstName = [[NSMutableString alloc]init];
    lastName = [[NSMutableString alloc]init];
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

   string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
   string = [string stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]];

   if ([currentElement isEqualToString:@"first"]) {
    [firstName appendString:string];
   } else if ([currentElement isEqualToString:@"last"]) {
    [lastName appendString:string];
   } else {
     ...
   }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{   
      if ([elementName isEqualToString:@"day"]) {
        NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
        [dictionary setObject:firstName forKey:@"fname"];
        [dictionary setObject:lastName forKey:@"lname"];
        //And finally
        [residents addObject:dictionary];
      }
}
然后,在代码中的任何地方都可以调用

[residents count]; 
以获取居民的总数


注意:我刚刚编写了这段代码,它可能有一些bug

据我所知,您只需要计算。如果是这样,你可以做以下事情

NSData *data = // your XML Data either from webservice or local file. Not xml string but the Data.
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser parse];
这段代码将是您获取数据的地方。在.h文件中:

@interface yourViewController : UIViewController {
     NSInteger resedintsCount;
}
在.m文件中:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
      if([elementName isEqualsToString:@"resident"]) {
           resedintsCount++;
      }
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {
     // you can use resedintsCount 
}
我假设您正在视图控制器中获取XML数据。如果您在AppDelegate或任何其他类中获得它,那么即使是相同的进程也会出现。
但是,如果您感到困惑,请随时询问。

请提供构建阵列的代码。谢谢。我编辑了这篇文章以包含代码。不,你没有:)你如何填充数组?嗯,我想这只是创建了它?我如何填充它呢?在看了代码之后,我意识到我实际上只需要返回标记在XML文件中出现的次数。我其实不需要“身份”部分。但仍然不确定如何实现它……NSXMLParser还有很多其他委托方法,但根据您的需求,您不需要这些方法。如果你需要它们,你可以使用它们。参考
NSData *data = // your XML Data either from webservice or local file. Not xml string but the Data.
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser parse];
@interface yourViewController : UIViewController {
     NSInteger resedintsCount;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
      if([elementName isEqualsToString:@"resident"]) {
           resedintsCount++;
      }
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {
     // you can use resedintsCount 
}