使用GDataXMLNode为Objective-C获取外部XML?

时间:2011-07-01 17:20:47

标签: objective-c xml ios gdataxml

我正在研究一种在PHP api和iOS应用程序之间进行通信的方法。这就是为什么我写了一个函数,它将获得一个外部XML feed(我的api)并解析它。

但在这样做的过程中,我发现了一个问题。我写的下一个代码不起作用:

-(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> 

1 个答案:

答案 0 :(得分:3)

api节点是您的根元素:

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

尝试:

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

我个人更喜欢nodesForXPath方法来检索元素。