Я искал приблизительно два часа, теперь пытаясь узнать то, что эта ошибка и как решить ее. В документах Apple с удовольствием говорится
Атрибут NSXMLParserAttributeNotStartedError не запускается. Доступный в Mac OS X v10.3 и позже. Объявленный в NSXMLParser.h.
но сбои для обеспечения любой справки вообще. Кто-либо может помочь мне здесь? Любое пошаговое перемещение в правильном направлении значительно ценится.
В viewDidLoad я имею:
NSURL *xmlUrl = [NSURL fileURLWithPath:xmlFilepath];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlUrl];
[xmlParser setDelegate:self];
[xmlParser setShouldResolveExternalEntities:NO];
BOOL success = [xmlParser parse];
Никакие проблемы с получением xml, я могу успешно читать вплоть до корневого элемента, затем это повреждается.
Остальная часть связанного кода идет как:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"foo"]) {
foo = [[NSMutableArray alloc] init];
} else if([elementName isEqualToString:@"bar"]) {
bar = [[Bar alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundAttributeDeclarationWithName:(NSString *)attributeName forElement:(NSString *)elementName type:(NSString *)type defaultValue:(NSString *)defaultValue {
if ([elementName isEqualToString:@"bar"]) {
if ([attributeName isEqualToString:@"barAttrib1"]) {
[bar setBarAttrib1:[defaultValue intValue]];
} else if ([attributeName isEqualToString:@"barAttrib2"]) {
[bar setBarAttrib2:defaultValue];
}
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
// nothing inside the elements, just attributes
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"bar"]) {
[foo addObject:bar];
[bar release];
bar = nil;
}
}
Заранее спасибо.
Править: пример xml
<foo>
<bar barAttrib1=1 barAttrib2="hello" />
<bar barAttrib1=2 barAttrib2="world" />
</foo>
Если это XML, то значение атрибута НЕОБХОДИМО заключать в кавычки. Попробуйте
<foo>
<bar barAttrib1="1" barAttrib2="hello" />
<bar barAttrib1="2" barAttrib2="world" />
</foo>
Обратите внимание на кавычки вокруг значений barAttrib1