【问题标题】:Display number of XML elements in a textfield在文本字段中显示 XML 元素的数量
【发布时间】:2013-12-27 12:39:37
【问题描述】:

我在网络上的某处有一个 XML 文件,其中包含几个配置文件,我希望在文本字段中显示配置文件的数量。

我有一个名为:numberOfProfiles..的文本字段。那么我应该在 viewDidLoad 中做什么?

numberOfProfiles.Text = ???

XML 文件被解析如下:

NSMutableString *currentNodeContent;
NSXMLParser *parser;
ViewController *currentProfile;
bool isStatus;

ViewController *xmlParser;

-(id)loadXMLByURL:(NSString *)urlString
{
    profile = [[NSMutableArray alloc] init];
    NSURL *url = [NSURL URLWithString:urlString];
    NSData *data = [[NSData alloc] initWithContentsOfURL:url];
    parser = [[NSXMLParser alloc] initWithData:data];
    parser.delegate = self;
    [parser parse];
    return self;
}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}


-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"firstname"])
    {
        currentProfile = [ViewController alloc];
        isStatus = YES;
    }

    if([elementName isEqualToString:@"lastname"])
    {
        currentProfile = [ViewController alloc];
        isStatus = YES;
    }

    if([elementName isEqualToString:@"email"])
    {
        currentProfile = [ViewController alloc];
        isStatus = YES;
    }

    if([elementName isEqualToString:@"address"])
    {
        currentProfile = [ViewController alloc];
        isStatus = YES;
    }

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"firstname"])
    {
        currentProfile->firstName = currentNodeContent;
        NSLog(@"%@",currentProfile->firstName);
        [profile addObject:currentProfile];

    }

    if([elementName isEqualToString:@"lastname"])
    {
        currentProfile->lastName = currentNodeContent;
        NSLog(@"%@",currentProfile->lastName);

        [profile addObject:currentProfile];
    }

    if([elementName isEqualToString:@"email"])
    {
        currentProfile->eMail = currentNodeContent;
        NSLog(@"%@",currentProfile->eMail);
        [profile addObject:currentProfile];
    }

    if([elementName isEqualToString:@"address"])
    {
        currentProfile->address = currentNodeContent;
        NSLog(@"%@",currentProfile->address);
        [profile addObject:currentProfile];
    }


    if([elementName isEqualToString:@"profiles"])
    {
        [self->profile addObject:currentProfile];
        currentProfile = nil;
        currentNodeContent = nil;
        setText:currentProfile->lastName;
    }
}

- (void)viewDidLoad
{   
        [super viewDidLoad];
        xmlParser = [[ViewController alloc] loadXMLByURL:@"http://dierenpensionlindehof.nl/profiles.xml"];

    }

提前致谢!

【问题讨论】:

  • 你试过这样:numberOfProfiles.Text = @"2" ?????
  • 可以直接取profile数组count [profile count]

标签: ios objective-c xml parsing uitextfield


【解决方案1】:

对于元素的计数,你可以有一个像 int 类型 numberOfProfilesCount 这样的实例变量,你可以在

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
     numberOfProfilesCount++;
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {
   numberOfProfiles.Text = [NSString stringWithFormate:@"%d", numberOfProfilesCount];
}

显示您的元素数量

【讨论】:

  • 谢谢,但是什么是 parserDidEndDocument?我没有这个功能
  • 当解析器解析 XML 的每个元素时,它是一个委托方法调用,因此您可以显示总数
  • 我只是把它放在一个按钮里面: numberOfProfiles.Text = [NSString stringWithFormate:@"%d", numberOfProfilesCount];当我单击此按钮时,它显示 71,而我只有 10 个配置文件?
  • 好的,谢谢,我只将 numberOfProfilesCount++ 放在 firstanmes 中,让它工作!
  • 你知道为什么这不显示配置文件profilesLabel吗? NSMutableString *str = [[NSMutableString alloc] init]; for(ViewController *obj in profile) { // 需要将 Obj 转换为任何类型的 'currentProfile' [str appendFormat:@"\n %@", obj->firstName]; } [profilesLabel setText:str];
【解决方案2】:

假设profile是一个全局变量,使用[profile count]获取配置文件的数量。

尝试:[numberOfProfiles setText:[[profile count] stringValue]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2017-11-14
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多