使用gdata xml解析带有名称空间的xml [英] parse xml with namespaces with gdata xml
问题描述
我正在开发一个ios应用程序,我正在使用gdataxml解析我的xml,但我做错了,我的nslog为空
i am developping an ios application and i am parsing my xml with gdataxml, but i am doing it wrong, my nslog is null
NSError *error = nil;
GDataXMLDocument *xmlResult = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error];
if (error) {
NSLog(@"%@",error);
}
NSLog(@%@,xmlResult.rootElement);
我的根元素是完美的,错误是tempArray
NSLog(@"%@",xmlResult.rootElement); my root element is perfect, the error is with tempArray
NSArray *tempArray = [xmlResult nodesForXPath:@"//message/error/value" error:&error];
NSLog(@mon array%@,tempArray);
NSLog(@"mon array %@",tempArray);
我的数组为空,
我的xml是这样的:
<message xmlns="http://.....Api" xmlns:i="http://www.w3.org/....">
<error i:nil="true"/>
<value>
我觉得我的问题与命名空间有关,但我不知道怎么办?
i am sur that my problème is with the namespace, but i don't how to do it ?
感谢您的回答
推荐答案
使用GDataXMLNode进行一些测试后,这是我的答案:
After some testing with GDataXMLNode, here is my answer:
NSArray *tempArray = [xmlResult nodesForXPath:@"//_def_ns:message/_def_ns:error/_def_ns:value" error:&error];
您可以在GDataXMLNode.h中看到此评论:
You can see this comment in 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 作为命名空间。但是,如果文档中还有其他名称空间,您也可以设置自己的名称空间。
It states that you can actually use _def_ns as your namespace. However, you can also set your own namespace in case there are other namespaces in your document.
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];
这篇关于使用gdata xml解析带有名称空间的xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!