2011-07-01 30 views
0

我正在研究一种在我的PHP API和iOS应用程序之间进行通信的方法。这就是为什么我写了一个函数,它会得到一个外部XML提要(我的api)并解析它。为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