2014-08-29 4 views
0

나는 웹 사이트 (예 : "http://www.kick-girl.com/?cat=3")어떻게 웹 사이트의 HTML을 얻을 NSXMLParser

내가 쉽게 사용하여 XML을 얻을 수 있습니다에서 XML을 구문 분석을 시도하고 그것을 구문 분석 :

NSURL *url = [NSURL URLWithString:@"http://www.kick-girl.com/?cat=3"]; 
NSLog(@"%@", [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]); 

그러나 NSXMLParser를 사용하려고하면 단순히 작동하지 않습니다. 이미 문자열을 데이터로 변환하려고 시도했습니다.

NSString *s = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 
NSData *d = [s dataUsingEncoding:NSUTF8Encoding]; 
NSXMLParser *xmlparser = [NSXMLParser alloc] initWithData:d]; 
xmlparser.delegate = self; 
[xmlparser parse]; 

그리고 여전히 작동하지 않습니다. NSXMLParserDelegate 메서드가 호출되지 않습니다. 예 :

- (void)parser:didStartElement:namespaceURI:qualifiedName:attributes: 

나는 또한 그

NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

AFHTTPRequestOperation *requestOp = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

requestOp.responseSerializer = [AFXMLParserResponseSerializer serializer]; 
[requestOp.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/xml", @"text/xml", @"text/html", nil]]; 
[requestOp setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSXMLParser *xmlparser = responseObject; 

    xmlparser.delegate = self; 
    [xmlparser parse]; //Delegate methods are not called for some reason... 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"OOPS: %@", error); 
}]; 
[requestOp start]; 

내가 문제가 무엇인지 이해하지 못하는 도움이 있는지 확인하기 위해 AFnetworking를 사용하여 시도했다.

나는 -parser에서 구문 분석 오류를 얻을 : parserErrorOccurred :
Error Domain=NSXMLParserErrorDomain Code=65 "The operation couldn’t be completed. (NSXMLParserErrorDomain error 65.)" UserInfo=0x8da6ce0 {NSXMLParserErrorLineNumber=2, NSXMLParserErrorColumn=17, NSXMLParserErrorMessage=attributes construct error 

}

나는이 문제를 어떻게 해결합니까

?

답변

0

분명히 웹 페이지에서 가져온 XML은 완벽하지 않으며 이상한 물건이 있습니다. 웹 브라우저는 xml을 읽을 때 상당히 용인되지만 nsxmlparser는 매우 엄격합니다.

이상한 물건이 나오지 않게하려면 원하는 부분의 부분 문자열을 가져 와서 새 줄 캐리지 리턴 및 탭과 같은 공백을 제거했습니다. 그리고 태그가 실제로 균형을 이루는 지 확인하기 위해 문자열 조작을 수행했습니다.