HTTP 응답을 감지하고 XML을 구문 분석하고 NSString에 저장하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1456076

문제

나는 이것을 몇 주 동안 알아 내려고 노력했지만 여전히 아무것도 얻지 못합니다. asihttprequest를 사용하고 있으며 데이터를 서버로 성공적으로 보냈으며 이제 응답 XML을 가져 와서 구문 분석하고 레이블이 붙은 각 NSString에 요소를 저장하여 서버에 게시 할 수 있습니다. 누구 든지이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

보고있는 것 사용하는 방법 페이지, 당신이하고 싶은 것은 요청이 완료 될 때 호출 할 수있는 메소드를 구현하는 것입니다. 예를 들어, 방법이 있다고 가정 해보십시오 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 요청에 대한 속성.

다른 팁

사소한 XML 구문 분석 요구 이외의 경우 iPhone 용 XML 라이브러리 사본을 받으십시오.
이전에 Google의 gdataxmlnode를 사용했지만 NSXML (불행히도 iPhone 용으로 배송되지 않는 Apple 라이브러리)가 더 가깝기 때문에 향후 작업에 KissXML을 사용할 것입니다.

응답을 구문 분석하는 방법은 다음과 같습니다. 여기에서는 다음과 같은 라인을 따라 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 데이터로 사전 등을 채울 수 있습니다. 이해가 되나요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top