2009-09-21 53 views
1

我一直试图弄清楚这几个星期,我什么也没有得到。我正在使用ASIHTTPRequest,并且成功将数据发送到服务器,现在我需要获取响应XML,解析它并将这些元素保存到每个标记的NSString中,以便将其发布到服务器。有没有人有关于如何做到这一点的想法?如何检测HTTP响应,解析xml并保存到NSString?

+0

你可以给一个代码示例吗? – 2009-09-21 18:39:04

回答

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属性。

+0

谢谢。现在正在工作 – timothy5216 2009-09-21 20:26:17

+0

上面的代码存在错误。应该是@selector(requestDone),只是说。 – Jordan 2009-09-21 20:39:45

+0

@Jordan - 谢谢,更正 – Tim 2009-09-21 21:26:17

2

如果您有其他不重要的XML解析需求,请为iPhone获取XML库的副本。
我以前使用过Google的GDataXMLNode,但我可能会在将来的工作中使用KissXML,因为它更接近NSXML(不幸的是,它并没有为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数据填充字典等。合理?

+0

是的它是有道理的。我现在得到它 – timothy5216 2009-09-21 20:22:52

+0

我试过这个,它不解析XML它只是返回null – timothy5216 2009-09-22 17:08:27

+0

等待没关系。我忘了更改nodesForXPath – timothy5216 2009-09-22 17:15:10