2011-12-27 11 views
0

以前にこの質問をしましたXMLParser AdviceNSXMLParserガイダンスが必要です

、私はまだそれが正しく機能するために取得することができませんが....

だから私は、私はゼロからスタートします推測:

特定のURLに位置

この

ようなXMLツリーです
<result> 

    //stuff that I dont need 

    <title> 
     //thing that I do need 
    </title> 

    //stuff that I dont need 

    <body> 
     //thing that I do need 
    </body> 

<result> 

どのように私はそれを解析するつもりですか? 私がこれまでに持っていた(役に立たない)コードは、この質問の先頭にあるリンクにあります。

ありがとうございます。

+1

[XMLParser Advice](http://stackoverflow.com/questions/8392089/xmlparser-advice)の可能な複製 –

+1

質問を再投稿しないでください。必要に応じてオリジナルを編集して、それをより鮮明にする必要があります。これはまた、フロントページにも当てはまります。 – jrturton

+0

アドバイスありがとうございます@jrturton – jisturiz

答えて

2

パーザのデリゲートになる単純なクラスを作成します。

@interface YourObject : NSObject <NSXMLParserDelegate> { 
    NSString *title, *body; // object attributes 
    NSXMLParser *parser;  // will parse XML 
    NSMutableString *strData; // will contains string data being parsed 
} 

@property(readwrite, copy) NSString *title, body; 

// will be used to set your object attributes 
-(void)fetchValuesAtURL:(NSString *)url; 

@end 

fetchValuesAtURL:メソッドは、解析操作を開始します。その後

@implementation YourObject 

@synthesize title, body; 

-(id)init { 
    self = [super init]; 
    if(self) { 
     title = @""; 
     body = @""; 
     parser = nil; 
     strData = [[NSMutableString alloc] initWithCapacity:10]; 
    } 
    return self; 
} 

-(void)fetchValuesAtURL:(NSString *)url { 
    if(parser) { 
     [parser release]; 
    } 
    NSURL *xmlURL = [NSURL URLWithString:url]; 
    parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL]; 
    [parser setDelegate:self]; 
    [parser parse]; 
} 

-(void)parser:(NSXMLParser *)parser 
didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName 
     attributes:(NSDictionary *)attributeDict { 
    // element is about to be parsed, clean the mutable string 
    [strData setString:@""]; 
} 

// the probably missing method 
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    // content (or part of) has been found, append that to the current string 
    [strData appendString:string]; 
} 

-(void)parser:(NSXMLParser *)parser 
    didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName { 
    // element has been parsed, test the element name 
    // and store strData accordingly 
    if([elementName isEqualToString:@"title"]) { 
     self.title = strData; 
    } 
    else { // or else if, here you got two elements to parse 
     self.body = strData; 
    } 
} 

-(void)dealloc { 
    [title release]; 
    [body release]; 
    [strData release]; 
    if(parser) { 
     [parser release]; 
    } 
    [super dealloc]; 
} 

@end 

YourObject *obj = [[YourObject alloc] init]; 
[obj fetchValuesAtURL:@"http://www.site.com/xml/url"]; 

NSXMLParserのデリゲートは、AppleからEvent-Driven XML Programming Guideで説明したように、より多くのことを行うことが可能です。
デリゲートメソッドの詳細については、NSXMLParserDelegate Protocol Referenceを参照してください。

+0

ありがとうございます – jisturiz

+2

現在のスレッドをブロックする同期呼び出しを行っています。 initWithContentsOfURLは、アプリケーションバンドル内のファイルに使用するためのものです。 – 0x8badf00d

+0

@ 0x8badf00d - それは良い点です。この例はNSXMLParserのガイダンスのとおりに有効です。 –

関連する問題