帮助解决NSXMLParser错误39:NSXMLParserAttributeNotStartedError

Alt*_*ice 7 xml cocoa-touch nsxmlparser ipad

我一直在寻找大约两个小时,现在试图找出这个错误是什么以及如何解决它.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];
Run Code Online (Sandbox Code Playgroud)

获取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;
 }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

编辑:示例xml

<foo>
  <bar barAttrib1=1 barAttrib2="hello" />
  <bar barAttrib1=2 barAttrib2="world" />
</foo>
Run Code Online (Sandbox Code Playgroud)

Jim*_*son 7

如果这是XML,则在属性值周围需要引号.尝试

<foo>
  <bar barAttrib1="1" barAttrib2="hello" />
  <bar barAttrib1="2" barAttrib2="world" />
</foo>
Run Code Online (Sandbox Code Playgroud)

请注意值的引号 barAttrib1