Разбирать xml с пространствами имен с gdata xml
Я разрабатываю приложение для ios и анализирую xml с помощью gdataxml, но я делаю это неправильно, мой nslog равен нулю
NSError *error = nil;
GDataXMLDocument *xmlResult = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error];
if (error) {
NSLog(@"%@",error);
}
NSLog(@"%@",xmlResult.rootElement); мой корневой элемент идеален, ошибка с tempArray
NSArray *tempArray = [xmlResult nodesForXPath:@"//message/error/value" error:&error];
NSLog (@ "mon array% @", tempArray);
мой массив нулевой,
мой xml такой:
<message xmlns="http://.....Api" xmlns:i="http://www.w3.org/....">
<error i:nil="true"/>
<value>
Я уверен, что моя проблема с пространством имен, но я не знаю, как это сделать?
спасибо за Ваш ответ
1 ответ
Решение
После некоторого тестирования с GDataXMLNode вот мой ответ:
NSArray *tempArray = [xmlResult nodesForXPath:@"//_def_ns:message/_def_ns:error/_def_ns:value" error:&error];
Вы можете увидеть этот комментарий в GDataXMLNode.h:
// This implementation of nodesForXPath registers namespaces only from the
// document's root node. _def_ns may be used as a prefix for the default
// namespace, though there's no guarantee that the default namespace will
// be consistenly the same namespace in server responses.
В нем говорится, что вы можете использовать _def_ns в качестве пространства имен. Однако вы также можете установить собственное пространство имен, если в вашем документе есть другие пространства имен.
NSDictionary *myNS = [NSDictionary dictionaryWithObjectsAndKeys:
@"http://.....Api", @"ns1",
@"http://.....Other_Api", @"ns2", nil];
NSArray *tempArray = [xmlResult nodesForXPath:@"//ns1:message/ns1:error/ns1:value" namespaces:myNS error:&error];