NSXMLParser解析器:解析xml时未触发didStartElement

时间:2012-01-25 16:04:22

标签: objective-c xcode cocoa-touch ios5 xml-parsing

我正在尝试解析xml文件并且没有错误,但在尝试读取它时,解析器:didStartElement事件未被触发。我做错了什么?感谢帮助。

- (void)viewDidLoad
        {
            [super viewDidLoad];

            // xml connect
            NSURL *url = [[NSURL alloc] initWithString:@"http://www.test.com/list.xml"];
            NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

            //Start parsing the XML file.
            BOOL success = [xmlParser parse];

            if(success)
                NSLog(@"No Errors");
            else
                NSLog(@"Error!");
        }

        // reading xml...

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

            if([elementName isEqualToString:@"main"]) {
                //Initialize the array.
                apps = [[NSMutableArray alloc] init];
            }
            else if([elementName isEqualToString:@"prog"]) {

                //Extract the attribute here.
                idUsuari = [attributeDict objectForKey:@"Id"];

                NSLog(@"ID: %@", idUser);
            }
        }

3 个答案:

答案 0 :(得分:5)

您尚未将视图控制器设置为XML Parser的委托:

[xmlParser setDelegate:self];

分配/ init后。如果没有这个,解析器就不知道将委托消息发送给谁。

答案 1 :(得分:0)

声明您当前的类符合NSXMLParserDelegate,然后

[xmlParser setDelegate:self];
在解析之前

,因此解析器知道可以调用您实现的委托方法。

例如

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

答案 2 :(得分:0)

请在再次运行后将其添加到Info.plist