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明显存在。 我在这里做错了什么?我错过了什么吗? 任何帮助将不胜感激。
答
首先,您必须在方法didstartelement中设置currentelement = elementName
。
现在要实现的方法foundcharacter。
在该方法中检查以下内容:
if ([currentelement isEqualtoString:@"QuestionnaireName"])
{
NSLog(@"value %@",string);
}
,那么你将获得价值“候诊室反馈”
+0
申报的NSString * currentelement在.h文件中 – Rupesh 2012-02-21 05:45:02
无关,但在didStartElement,如果元素是“QuestionnaireName”,你再想找一个同名的属性。根据示例XML,元素QuestionnaireName没有属性(如QuestionnaireXML有两个属性:的xmlns和xmlns:1)。您已实现其他委托方法像foundCharacters和didEndElement? – Anna 2012-02-21 03:18:54