NSXMLParserErrorDomain ошибка 41 - PullRequest
       20

NSXMLParserErrorDomain ошибка 41

0 голосов
/ 31 августа 2011

Я анализирую xml-файл, который выдает ошибку

NSXMLParserErrorDomain error 41

Кто-нибудь подскажет мне, в чем причина этой ошибки и как ее решить.

Заранее спасибо.

XML-файл похож на

 <GetOpenQuestionsForUserResult>
 <Questions Count="2">
 <Question id="44">
 <Question Title>test for mitesh</Question Title>
 <Question Description>please respond from mobile</Question Description>
 <Creator Name>test@abc.com</Creator Name>
 <Creation Date>08/29/2011</Creation Date>
 <Respondent Names>test@abc.com</Respondent Names>
 <Anonymous Answers>Yes</Anonymous Answers>
 <Expiry Date>08/29/2011</Expiry Date>
 </Question>

 <Question id="45">
 <Question Title>test for mitesh 2</Question Title>
 <Question Description>second question for mitesh mobile</Question Description>
 <Creator Name>test1@abc.com</Creator Name>
 <Creation Date>08/29/2011</Creation Date>
 <Respondent Names>test1@abc.com</Respondent Names>
 <Anonymous Answers>Yes</Anonymous Answers>
 <Expiry Date>08/31/2011</Expiry Date>
 </Question>
 </Questions>
 </GetOpenQuestionsForUserResult>
 </GetOpenQuestionsForUserResponse>

Скажите, пожалуйста, как разобрать этот XML-файл

Я сделал следующий код для разбора

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
attributes:(NSDictionary *)attributeDict {


if([elementName isEqualToString:@"Question"]) 
{
    [QuesIdArray addObject: [attributeDict objectForKey:@"id"]];
}
   else if([elementName isEqualToString:@"Question Title"]) 
{

}
else if([elementName isEqualToString:@"Question Description"]) 
{

}
else if([elementName isEqualToString:@"Creator Name"]) 
{

}
else if([elementName isEqualToString:@"Creation Date"]) 
{

}
else if([elementName isEqualToString:@"Respondent Names"]) 
{

}
else if([elementName isEqualToString:@"Anonymous Answers"]) 
{

}

else if([elementName isEqualToString:@"Expiry Date"]) 
{

}

  }

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

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


NSLog(@"Processing Value: %@", currentElementValue);


  }



   - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

if(currentElementValue) 
    currentElementValue = [currentElementValue stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

if([elementName isEqualToString:@"Error"]) 
{

    //appDelegate.ErrorString = [ [ NSString alloc ] initWithString: currentElementValue ] ;
}

else if([elementName isEqualToString:@"Question Title"]) 
{

    [QuesTitleArray addObject:currentElementValue];
}
else if([elementName isEqualToString:@"Question Description"]) 
{

    [QuesTextArray addObject:currentElementValue];
}
else if([elementName isEqualToString:@"Creator Name"]) 
{
    [QuesCreatorArray addObject:currentElementValue];
}
else if([elementName isEqualToString:@"Creation Date"]) 
{
    [QuesCreationDateArray addObject:currentElementValue];
}
else if([elementName isEqualToString:@"Respondent Names"]) 
{
    [ResNamesArray addObject:currentElementValue];
}
else if([elementName isEqualToString:@"Anonymous Answers"]) 
{
    [QuesAnswerArray addObject:currentElementValue];
}

else if([elementName isEqualToString:@"Expiry Date"]) 
{

    [QuesExpiryDateArray addObject:currentElementValue];
}

//[currentElementValue release];

currentElementValue = nil;
}

Может кто-нибудь сказать мне, какую ошибку я здесь совершил.Это дало ошибку: NSXMLParserErrorDomain error 41

Ответы [ 3 ]

1 голос
/ 31 августа 2011

Из NSXMLParser ссылка - 41 код ошибки: NSXMLParserAttributeHasNoValueError

Проблема в том, что ваш xml искажен, поскольку имена тегов xml не могут содержать пробелы.Например,

<Question Title>...

Здесь имя тега равно «Вопрос», а «Заголовок» интерпретируется как имя атрибута, которое не имеет значения.Вы должны исправить свой xml, чтобы исправить это (т.е. удалить пробелы в именах тегов).

0 голосов
/ 31 августа 2011

NSXMLParserErrorDomain error 41 означает, что атрибут не имеет значения.Поскольку вы неправильно называете элементы, вы в конечном итоге получаете атрибут без значения.

0 голосов
/ 31 августа 2011

старайтесь не давать пробелы для имен тегов, скажем, ты дал <Question Title>test for mitesh</Question Title>

сделай это

<QuestionTitle>test for mitesh</QuestionTitle>

Другие теги тоже, и попробуйте

...