1

NSXMLParser で xml を解析するには、Web 上の簡単なチュートリアルに従ってください。デリゲート オブジェクトは初期化を行いますが、NSXMLParser デリゲート メソッドをトリガーすることはありません。私は何を間違っていますか?WindowsでGNUSetupを使用しています。

ここで私はパーサーを呼び出します:

-(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 に到達します。ここで何が間違っていますか?:[err localizedDescription] このメッセージにも入っています:

NSXMLParserErrorDomain 3

どういう意味ですか ?

4

1 に答える 1

0

XmlParser.hパーサーデリゲートを実装していることを示す必要があります

この行

@interface XMLParser : NSObject

する必要があります

@interface XMLParser : NSObject <NSXMLParserDelegate>

編集:

あなたの初期化も間違っています。次のようにする必要があります

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

  return self;
}

[super init]の値を自分自身に代入するのを忘れました

于 2013-02-03T09:10:07.940 に答える