Справка решая ошибку NSXMLParser 39: NSXMLParserAttributeNotStartedError

Я искал приблизительно два часа, теперь пытаясь узнать то, что эта ошибка и как решить ее. В документах 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>
7
задан Altealice 2 August 2010 в 13:41
поделиться

1 ответ

Если это XML, то значение атрибута НЕОБХОДИМО заключать в кавычки. Попробуйте

<foo>
  <bar barAttrib1="1" barAttrib2="hello" />
  <bar barAttrib1="2" barAttrib2="world" />
</foo>

Обратите внимание на кавычки вокруг значений barAttrib1

7
ответ дан 7 December 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: