代码之家  ›  专栏  ›  技术社区  ›  Altealice

帮助解决nsxmlparser错误39:nsxmlparserattributeNotStartedError

  •  6
  • Altealice  · 技术社区  · 14 年前

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

    NSXML分析属性未启动错误 属性未启动。可在 Mac OS X v10.3及更高版本。宣布在 NSXMLParser .

    但没有提供任何帮助。有人能帮我吗?任何朝着正确方向的轻推都是非常感谢的。

    在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>
    
    1 回复  |  直到 14 年前
        1
  •  6
  •   Jim Garrison    14 年前

    如果这是XML,则引号是 必修的 在属性值周围。尝试

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

    注意以下值周围的引号: barAttrib1