1

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

4

2 回答 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 回答