如何检测HTTP响应,解析xml并保存到NSString?

时间:2009-09-21 18:35:32

标签: iphone objective-c xml nsstring asihttprequest

我一直试图解决这个问题几个星期,但我仍然一无所获。我正在使用ASIHTTPRequest并成功将数据发送到服务器,现在我需要获取响应XML,解析它并将元素保存到每个标记的NSString,以便我可以将其发布到服务器。有没有人知道如何做到这一点?

2 个答案:

答案 0 :(得分:4)

通过查看How to Use页面,我认为您要做的是实现可在请求完成时调用的方法。例如,假设您有一个方法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属性。

答案 1 :(得分:2)

如果您有非简单的XML解析需求,请获取iPhone的XML库副本 我之前使用过谷歌的GDataXMLNode,但我可能会将KissXML用于未来的工作,因为它更接近NSXML(不幸的是,它没有为iphone提供的Apple库)。

这是一种解析响应的方法,在这里我正在寻找您可能通常从Rails服务器看到的错误,如下所示:

  <errors><error>Description of what went wrong</error></errors>

您可以看到我从库中获取'request'对象,并将响应字符串提供给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数据填充字典等。有意义吗?