Objective c 使用NSXMLParser解析问题

Objective c 使用NSXMLParser解析问题,objective-c,ios,parsing,nsxmlparser,Objective C,Ios,Parsing,Nsxmlparser,我正在尝试解析来自web服务器的响应 我的解析器执行以下操作: #import "XMLParser.h" #import "AppDelegate.h" #import "Child.h" @implementation XMLParser - (XMLParser *) initXMLParser { self = [super init]; if(self) { appDelegate = (AppDelegate *)[[UIApplic

我正在尝试解析来自web服务器的响应

我的解析器执行以下操作:

#import "XMLParser.h"
#import "AppDelegate.h"
#import "Child.h"

@implementation XMLParser

- (XMLParser *) initXMLParser {

     self = [super init];

    if(self)
    {
        appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    }
    return self;
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict 
{
    if([elementName isEqualToString:@"GetKidsResult"])
    {
        // initialize the array
        if(!appDelegate.children)
        {
            appDelegate.children = [[NSMutableArray alloc] init];

        }

    }

    else if([elementName isEqualToString:@"a:KeyValueOfintKidf4KEWLbb"])
    {
        if(!aChild)
        {
        //Initialize the child.
            aChild = [[Child alloc] init];
        }
    }

    NSLog(@"Processing Element: %@", elementName);
}

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

    if(!currentElementValue) 
    {
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    }
    else
    {
        [currentElementValue appendString:string];
    }

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    //NSLog(@"El name: %@", elementName);

    if([elementName isEqualToString:@"GetKidsResult"])

        NSLog(@"end of xml");
        return;    

    if([elementName isEqualToString:@"a:KeyValueOfintKidf4KEWLbb"])
    {
        NSLog(@"Found end of child");

        [appDelegate.children addObject:aChild];

        aChild = nil;
    }

    else if([elementName isEqualToString:@"a:Key"])
    {
        NSLog(@"Found key");
    }

    else if([elementName isEqualToString:@"b:CheckedIn"])
    {
        NSLog(@"Found checkedIn");
    }

    else if([elementName isEqualToString:@"b:FirstName"])
    {
        NSLog(@"Found firstname");
    }

    else if([elementName isEqualToString:@"b:Gender"])
    {
        NSLog(@"found gender");
    }

    else if([elementName isEqualToString:@"b:Id"])
    {
        NSLog(@"found id");
    }

    else if([elementName isEqualToString:@"b:IsOnTour"])
    {
        NSLog(@"found isontour");

    }

    else if([elementName isEqualToString:@"b:LastName"])
    {
        NSLog(@"found lastname");
    }

    else if([elementName isEqualToString:@"b:GroupName"])
    {
        NSLog(@"found groupname");
    }

    currentElementValue = nil;

}
@end
现在我只是想看看它是否找到了数据。。。之后我会保存它。。。 但在我的日记里,除了我的名字,似乎什么也找不到

if([elementName isEqualToString:@"GetKidsResult"])
我的xml响应的一个示例:

            <a:KeyValueOfintKidf4KEWLbb>
            <a:Key>XXXXXXXX</a:Key>
            <a:Value xmlns:b="http://schemas.datacontract.org/2004/07/DayCare.DB.DTO">
                <b:CheckedIn>false</b:CheckedIn>
                <b:FirstName>XXXXXXX</b:FirstName>
                <b:Gender>Male</b:Gender>
                <b:Id>XXXXXXXX</b:Id>
                <b:IsOnTour>false</b:IsOnTour>
                <b:LastName>XXXXXX</b:LastName>
                <b:Photo>XXXXXXXX</b:Photo>
                <b:GroupName>XXXXX</b:GroupName>
            </a:Value>
        </a:KeyValueOfintKidf4KEWLbb>
例如:

Processing Element: a:KeyValueOfintKidf4KEWLbb
Processing Element: a:Key
Processing Element: a:Value
Processing Element: b:CheckedIn
Processing Element: b:FirstName
Processing Element: b:Gender
Processing Element: b:Id
Processing Element: b:IsOnTour
Processing Element: b:LastName
Processing Element: b:Photo
Processing Element: b:GroupName

didEndElement
中,尝试更改此部分:

if([elementName isEqualToString:@"GetKidsResult"])

    NSLog(@"end of xml");
    return;  
致:


如果不将这两条语句放在块中的
if
后面,则每次都会执行
return

D'oh:D我犯了一个愚蠢的错误。。。最初NSLog不在那里,所以这不是问题,但在添加NSLog后忘记添加块。。。谢谢:)将在5分钟内接受答案:)stackoverflow不会让我提前接受答案。。。但是谢谢!这就是为什么总是用“{”括起块是一种很好的做法。总是使用大括号
{…}
对于if和else子句,除非有人拿枪指着你的头,即使这样,最好还是不要装枪。这应该可以。如果firstName是Child中的一个属性,也可以执行aChild.firstName=currentElementValue。
if([elementName isEqualToString:@"GetKidsResult"])

    NSLog(@"end of xml");
    return;  
if([elementName isEqualToString:@"GetKidsResult"])
{
    NSLog(@"end of xml");
    return;  
}