xml - 求助解决NSXMLParser error 39 : NSXMLParserAttributeNotStartedError

标签 xml cocoa-touch ipad nsxmlparser

我已经搜索了大约两个小时,试图找出这个错误是什么以及如何解决它。 Apple 的文件很高兴地说

NSXMLParserAttributeNotStartedError Attribute is not started. Available in Mac OS X v10.3 and later. Declared in 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

值的引号

关于xml - 求助解决NSXMLParser error 39 : NSXMLParserAttributeNotStartedError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388073/

相关文章:

javascript - Three.js 在 iPad Air 2 上无法正确渲染

android - 如何创建具有最小和最大高度的布局?

java - 如何在使用 TabHost 创建的 Android 中仅显示选定的选项卡布局

c - 如何从 xml schema(xsd) 的复杂类型获取正则表达式?

iOS - 计算区域中颜色的百分比

ios - 哪些 JavaScript 库/框架已被证明可以通过 PhoneGap 在 iPad 上提供出色的用户体验?

android - 将 LinearLayout 的位置更改为屏幕的页脚

objective-c - 在objective-c/cocoa-touch中是否有一个方便的功能来找到一个最小的数字?

objective-c - 为什么我们都在 init 方法中检查 if(self)?

iphone - SDWebImage 在缓存之前处理图像