objective c NSXMLParser委托类不会触发委托方法

objective c NSXMLParser委托类不会触发委托方法

问题描述:

我在网上使用简单的tutorial来解析xml和NSXMLParser。 委托对象执行init操作,但从不触发NSXMLParser委托方法。 什么即时通讯做错了?在Windows上使用GNUSetup即时通讯软件 。objective c NSXMLParser委托类不会触发委托方法

这里就是我所说的解析器:

-(BOOL) loadXmlPath :(NSString*)filePathXml:(NSString*) filePathWrite 
{ 
    if([fileMgr fileExistsAtPath:filePathXml] == YES) 
    { 
     NSLog(@"%@",filePathXml);  
     NSURL *xmlURL = [NSURL fileURLWithPath:filePathXml]; 
     NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
     if(nsXmlParser) 
     { 
      NSLog(@"done setup parser"); 
     } 
     else 
     { 
      NSLog(@"fail setup parser"); 
     } 
     // create and init our delegate 
     XMLParser *parser = [[XMLParser alloc] initXMLParser]; 
     [nsXmlParser setShouldProcessNamespaces:NO]; // We don't care about namespaces 
    [nsXmlParser setShouldReportNamespacePrefixes:NO]; // 
    [nsXmlParser setShouldResolveExternalEntities:NO]; // We just want data, no other stuff 
    // set delegate 
    [nsXmlParser setDelegate:parser]; 
    // parsing... 
    BOOL success = [nsXmlParser parse]; 
     // test the result 
    if (success) { 
     NSLog(@"parsing document!"); 
     // get array of users here 
    } else { 
     if ([nsXmlParser parserError]) { 
      NSError *err = [nsXmlParser parserError]; 
      NSString *serror = [err localizedDescription]; 
      NSLog(@"Error parsing document!%@\n",serror); 
     } 
     NSLog(@"Error parsing document!"); 
    } 
    } 
    return NO; 
} 

XmlParser.h

#import <Foundation/Foundation.h> 

@interface XMLParser : NSObject 
{ 
    NSXMLParser *parser; 


} 
-(XMLParser *) initXMLParser; 
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict; 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string; 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName; 

@end 

XmlParser.m

#import "XMLParser.h" 
@implementation XMLParser 



- (XMLParser *) initXMLParser { 
    self = [super init]; 
    NSLog(@"Init xml parser"); 

    return self; 
} 


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 

    NSLog(@"Enter parser 1"); 
    if ([elementName isEqualToString:@"name"]) { 
    NSLog(@"%@",elementName); 

     return; 
    } 

    if ([elementName isEqualToString:@"person"]) { 

     return; 
    } 

    if ([elementName isEqualToString:@"lastName"]) { 

     return; 
    } 

} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    NSLog(@"Enter parser 2"); 

} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    NSLog(@"Enter parser 3"); 

    if (([elementName isEqualToString:@"addresses"]) || 
     ([elementName isEqualToString:@"address"])) return; 

    if ([elementName isEqualToString:@"person"]) { 

     return; 
    } 

} 

@end 

它从来没有达到解析器方法。但是它的确到达了initXMLParser。 我在这里做错了什么? 也即时得到的:犯错localizedDescription] 这条消息:

NSXMLParserErrorDomain 3

这是什么意思?

+0

XMLParser的*解析器= [[XMLParser的页头] initXMLParser]。 [nsXmlParser setShouldProcessNamespaces:NO]; //我们不关心名称空间 [nsXmlParser setShouldReportNamespacePrefixes:NO]; // [nsXmlParser setShouldResolveExternalEntities:NO]; //我们只是想要数据,没有其他东西 //设置代理 [nsXmlParser setDelegate:self]; //代替语法分析器把它放到自我 //解析... BOOL success = [nsXmlParser parse]; – Kasaname

在你XmlParser.h你需要证明你实现解析器委托

此行

@interface XMLParser : NSObject 

应该

@interface XMLParser : NSObject <NSXMLParserDelegate> 

编辑:

你的init是也是NG,它应该是如下

- (XMLParser *) initXMLParser { 
    self = [super init]; 
    NSLog(@"Init xml parser"); 

    return self; 
} 

你忘记的[super init]值分配给自

+0

我添加了这个但仍然失败,达到: – user63898

+0

我编辑了代码,你没有给'self'设置一个值 – Flexicoder

+0

我编辑代码(看原始msg) 还增加了错误检查和im得到: NSXMLParserErrorDomain 3 ..这是什么意思? – user63898