0

私は Objective C の初心者です。URL から XML ファイルを解析したいのですが、NSXMLPARSER に関するサンプル コードを見つけて、このコードを書きましたが、機能しません。

私を助けてください。

私のxmlファイルは次のとおりです。

<list>
<first>apple</first>
</list>

...私のViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <NSXMLParserDelegate>  {

}
@property (weak, nonatomic) IBOutlet UITextView *myTextField;

@end

...私のViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController @synthesize myTextField;
- (void)parseXMLFileAtURL:(NSString *)URL { 
    NSURL * xmlURL = [NSURL URLWithString:URL];
    NSXMLParser * rssparser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
    [rssparser setDelegate:self];
    [rssparser parse];
}

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

    if ([elementName isEqualToString:@"list"]) {
        // clear out our story item caches...
        myTextField.text = [attributeDict objectForKey:@"first"];
    }
}

- (void)viewDidLoad {
    NSString * path = @"http://example.com";
    [self parseXMLFileAtURL:path];
    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib. 
}

- (void)viewDidUnload {
    [self setMyTextField:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view. 
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
}

@end
4

2 に答える 2

0

attributeDict は属性値のみを保持します ...

<first name="something" last="something" > <sec>some</sec></first>

したがって、最初のattributeDictとして elementName を取得すると、 'name''last'および子要素ではないその他の属性が設定されます。

于 2012-04-08T13:56:57.460 に答える
0

これが ViewController であると宣言するべきではありません。これは非常に悪い設計です。新しいクラスを作成します (ex XMLParser: @interface XMLParser : NSObject <NSXMLParserDelegate>) ここで、初期化メソッド parse を呼び出します。以下のサンプルコード:

-(id)init
{
    self = [super init];

    parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"guidef" ofType:@"xml"]]];

    [parser setDelegate:self];
    [parser parse];

    return self;
}

これで、メソッドを宣言できます。

于 2012-04-08T13:40:49.877 に答える