2011-07-01 5 views
0

私はPHP apiとiOSアプリケーションの間でやりとりする方法に取り組んでいます。これが(私のAPIの)外部XMLフィードを取得して解析する関数を書いた理由です。Objective-CのためにGDataXMLNodeで外部XMLを取得するには?

しかし、それを行うプロセスで、私は問題を発見しました。私が書いた次のコードは動作しません。

-(void)getXML:(NSURL *)url { 
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:url]; 
    NSURLResponse *resp = nil; 
    NSError *err = nil; 
    NSData *response = [NSURLConnection sendSynchronousRequest: theRequest returningResponse: &resp error: &err]; 
    xmlDocument = [[GDataXMLDocument alloc]initWithData:response options:0 error:&error]; 
    NSArray *data = [[xmlDocument rootElement]elementsForName:@"api"]; 
    data_from_xml = [[NSMutableArray alloc]init]; 
    for(GDataXMLElement *e in data) 
    { 
     [data_from_xml addObject:e]; 
    } 

    NSLog(@"xmlDocument:%@]\n\nData:%@\n\nData_from_xml:%@\n\nURL:%@", xmlDocument,data,data_from_xml, url); 


} 

ログ戻っ:

xmlDocument:GDataXMLDocument 0x5a1afb0 

Data:(null) 

Data_from_xml:(
) 

URL:http://sr.site-project.nl/api/?t=store.search.keyword 

だから、GDataXMLDocumentはXMLを持っているようです。しかし、私はelementsForName引数でそれを読み込むことができません?

誰かが問題を認識していますか?

XML:

<?xml version="1.0"?> 
<api><type>core.error</type><errorMessage>API store.search.keyword doesn't exists</errorMessage></api> 

答えて

3

apiノードがルート要素です:

NSArray *data = [[xmlDocument rootElement]elementsForName:@"api"]; 

は試してみてください。

NSError *error = nil; 
NSArray *data = [xmlDocument nodesForXPath:@"//api" error:&error]; 

私は個人的要素を取得するためのnodesForXPath方法を好みます。

+0

Thanx、それは動作します(nodesForXPath)。文字列とxmlフィードの文字列を比較する際にいくつかの問題がありますが、私はそれを自分で解決できると思います; – Timo

+1

受け入れてくれてありがとうございます。要素から文字列を取得するには、要素のstringValueメソッドを使用します。文字列を比較するには、isEqualToStringを使用します。お役に立てれば! – InsertWittyName

+0

ありがとうございます;)isEqualToStringは正常に動作します;) – Timo

関連する問題