NSXML解析器找不到元素名称

问题描述:

我试图使用NSXML解析器.NET WCF web服务解析XML。 这里是XML其中我的网络的服务回报:NSXML解析器找不到元素名称

<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:

-(IBAction)getQuestionnaire 
{ 
    // Obtain questionnaire ID from input textfield 
    NSString *qid = questionnaireId.text; 

    // Begin creating URL string and contact web service 
    dataWebService = [NSMutableData data]; 
    NSString *combinedRequest = [NSString stringWithFormat:@"http://www.osqar.co.uk/OsqarWCF/frank.svc/getQuestionnaireForID?id=%@", qid]; 
    NSURL * myURL = [NSURL URLWithString:combinedRequest]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: myURL]; 
    NSURLConnection *myConnection = [NSURLConnection connectionWithRequest:request delegate:self]; 
    [myConnection start]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [dataWebService setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [dataWebService appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSString *responseString = [[NSString alloc] initWithData:dataWebService encoding:NSUTF8StringEncoding]; 
    XMLParser *parseQuestionnaire = [[XMLParser alloc] init]; 
    Questionnaire *myQuestionnaire = [parseQuestionnaire parseXML:responseString]; 
} 

然后解析XML的XMLParser的类,它的方法。像这样:

#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方法但随后步骤出来的如果([的ElementName isEqualToString:@“QuestionnaireName”])语句。

你可以从XML样品上方看到的是,Element QuestionnaireName明显存在。 我在这里做错了什么?我错过了什么吗? 任何帮助将不胜感激。

+0

无关,但在didStartElement,如果元素是“QuestionnaireName”,你再想找一个同名的属性。根据示例XML,元素QuestionnaireName没有属性(如QuestionnaireXML有两个属性:的xmlns和xmlns:1)。您已实现其他委托方法像foundCharacters和didEndElement? – Anna 2012-02-21 03:18:54

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

现在要实现的方法foundcharacter

在该方法中检查以下内容:

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

,那么你将获得价值“候诊室反馈”

+0

申报的NSString * currentelement在.h文件中 – Rupesh 2012-02-21 05:45:02