Получение внешнего XML с GDataXMLNode для Objective-C?
Я работаю над методом связи между моим PHP API и iOS-приложением. По этой причине я написал функцию, которая получит внешний XML-канал (моего 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 ответ
Решение
api
узел - это ваш корневой элемент:
NSArray *data = [[xmlDocument rootElement]elementsForName:@"api"];
Пытаться:
NSError *error = nil;
NSArray *data = [xmlDocument nodesForXPath:@"//api" error:&error];
Я лично предпочитаю nodesForXPath
метод для извлечения элементов.