Iphone NSXML解析器找不到元素名称

Iphone NSXML解析器找不到元素名称,iphone,objective-c,xml,xcode,nsxmlparser,Iphone,Objective C,Xml,Xcode,Nsxmlparser,我正在尝试使用NSXML解析器从.NET WCF Web服务解析XML。 以下是我的web服务返回的XML: <QuestionnaireXML xmlns="http://schemas.datacontract.org/2004/07/QuestionnaireDescriptor" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <QuestionnaireName>Clinic Waiting Ro

我正在尝试使用NSXML解析器从.NET WCF Web服务解析XML。 以下是我的web服务返回的XML:

<QuestionnaireXML xmlns="http://schemas.datacontract.org/2004/07/QuestionnaireDescriptor" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <QuestionnaireName>Clinic Waiting Room Feedback</QuestionnaireName>
    <Questions>
        <Question>
            <Answers>
                <Answer>
                     <AnswerTitle>Windows</AnswerTitle>
                </Answer>
                <Answer>
                    <AnswerTitle>Mac</AnswerTitle>
                </Answer>
            </Answers>
            <QuestionID>363</QuestionID>
            <QuestionName>Windows or Mac?</QuestionName>
        </Question>
    </Questions>
</QuestionnaireXML>
然后将XML解析为XMLParser类和it方法。像这样:

#import "XMLParser.h"
#import "Questionnaire.h"

@implementation XMLParser

@synthesize xmlParser;

-(Questionnaire *)parseXML:(NSString *)xml
{    
    userRet = [[Questionnaire alloc] init];
    NSData *data = [xml dataUsingEncoding:NSUTF8StringEncoding];

    self.xmlParser = [[NSXMLParser alloc] initWithData:data];
    self.xmlParser.delegate = self;
    if([self.xmlParser parse])
    {
        NSLog(@"The Xml is parsed.");
    }
    else
    {
        NSLog(@"Failed to parse the XML");
    }

    return userRet;
}

- (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError 
{
    NSLog(@"Error Parser:%@",[parseError localizedDescription]);
}

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName
   namespaceURI: (NSString *) namespaceURI
  qualifiedName: (NSString *) qName
     attributes: (NSDictionary *) attributeDict
{
    if ([elementName isEqualToString:@"QuestionnaireName"]) 
    {
        NSString *name = [attributeDict objectForKey:@"QuestionnaireName"];
        NSLog(@"QuestionnaireName: %@", name);
        userRet.QuestionnaireName = [attributeDict objectForKey:@"QuestionnaireName"];
    }   
}
我这里的问题是,显然找不到元素名QuestionnaireName。我已经放置了一个断点,代码步进了didStartElement方法,但随后退出了if([elementName isqualtostring:@“QuestionnaireName”])语句

从上面的XML示例中可以看到,元素QuestionnaireName显然存在。 我做错了什么?我错过什么了吗?
任何帮助都将不胜感激

首先必须在方法didstartelement中设置
currentelement=elementName

现在必须实现方法foundcharacter

在该方法中,检查以下各项:

if ([currentelement isEqualtoString:@"QuestionnaireName"])
{    
    NSLog(@"value  %@",string);    
}

然后您将获得值“门诊候诊室反馈”

首先您必须在方法didstartelement中设置
currentelement=elementName

现在必须实现方法foundcharacter

在该方法中,检查以下各项:

if ([currentelement isEqualtoString:@"QuestionnaireName"])
{    
    NSLog(@"value  %@",string);    
}

然后,您将获得值“Clinic Waiting Room Feedback”

但在didStartElement中,如果元素为“QuestionnaireName”,则您将查找相同名称的属性。根据示例xml,元素QuestionnaireName没有属性(例如QuestionnaireXML有两个属性:xmlns和xmlns:i)。您是否实现了其他委托方法,如foundCharacters和didEndElement?不相关,但在didStartElement中,如果元素为“QuestionnaireName”,则您将查找同名的属性。根据示例xml,元素QuestionnaireName没有属性(例如QuestionnaireXML有两个属性:xmlns和xmlns:i)。您是否实现了其他委托方法,如foundCharacters和DiEndElement?在.h文件中声明NSString*currentelement在.h文件中声明NSString*currentelement