Разбирать 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];
Другие вопросы по тегам