разбирать xml с пространствами имен с gdata xml - PullRequest
3 голосов
/ 01 февраля 2012

Я разрабатываю приложение 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 (@ "массив массив% @", tempArray);

мой массив нулевой,

мой xml такой:

<message xmlns="http://.....Api" xmlns:i="http://www.w3.org/....">
<error i:nil="true"/>
<value>

Я уверен, что моя проблема связана с пространством имен, но я не знаю, как это сделать?

спасибо за ваш ответ

1 Ответ

8 голосов
/ 23 февраля 2012

После некоторого тестирования с 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];
...