几个星期以来我一直试图解决这个问题,但我仍然一无所获。我正在使用 ASIHTTPRequest 并且我成功地将数据发送到服务器,现在我需要获取响应 XML,解析它并将元素保存到每个标记的 NSString 以便我可以将其发布到服务器。有谁知道如何做到这一点?
问问题
3941 次
2 回答
4
通过查看如何使用页面,我认为您想要做的是实现可以在请求完成时调用的方法。例如,假设您有一个done:
希望在请求完成时被调用的方法。您可以将该方法设置为请求中的“完成”选择器:
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease];
[request setDelegate:self];
[request setDidFinishSelector:@selector(done:)];
然后,您实现该done:
方法:
- (void)done:(ASIHTTPRequest *)request
{
NSString *response = [request responseString];
}
这一切都假设您正在异步发送请求;如果您使用的是同步调用,您可以responseString
在请求中使用该属性。
于 2009-09-21T18:43:32.240 回答
2
如果您的 XML 解析需要不是很简单,请获取 iPhone 的 XML 库的副本。
我以前为此使用过 Google 的 GDataXMLNode,但我可能会在以后的工作中使用 KissXML,因为它更接近 NSXML(不幸的是,Apple 库不为 iphone 提供)。
这是解析响应的一种方法,在这里我正在寻找您通常可能从 Rails 服务器看到的错误,大致如下:
<errors><error>Description of what went wrong</error></errors>
您可以看到我从库中取回了“请求”对象,并将响应字符串输入到 GDataXMLDocument 中。
GDataXMLDocument* root = [[GDataXMLDocument alloc] initWithXMLString:[request responseString] options:0 error:nil];
// Parse the error strings
NSArray* errors = [root nodesForXPath:@"//errors/error" error:nil];
// What is the first error string.... etc......
NSString* firstError = [[errors objectAtIndex:0] stringValue];
此处返回的数组包含与 XML 中的该路径匹配的节点列表。如果您不熟悉 XPath,它并不难学,并且对于从 XML 响应中提取数据很有用。对数组中返回的元素调用 stringValue 将返回上例中元素之间的文本。
您当然可以使用返回的 XML 数据填充字典等。有道理?
于 2009-09-21T19:47:11.287 回答