웹 페이지 목록에서 텍스트를 가져오고 싶습니다. 약간의 실험을했는데 내 요구에 가장 적합한 방법은 WebKit을 통해 이루어지는 것입니다. 페이지의 소스를 잡고되면NSXMLDocumentTidyHTML이 일부 XHTML 유효성 검사 오류를 정리하지 않았습니다.
, 나는 여기에 내 코드입니다 the technique in this comment.
를 사용하여 모든 HTML 태그를 제거하려면 :
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {
if(frame == [sender mainFrame]) {
NSString *content = [[[[sender mainFrame] dataSource] representation] documentSource];
NSXMLDocument *theDocument = [[NSXMLDocument alloc] initWithXMLString:content options:NSXMLDocumentTidyHTML error:&theError];
NSString *theXSLTString = @"<?xml version='1.0' encoding='utf-8'?>\n<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:xhtml='http://www.w3.org/1999/xhtml'>\n<xsl:output method='text'/>\n<xsl:template match='xhtml:head'></xsl:template>\n<xsl:template match='xhtml:script'></xsl:template>\n</xsl:stylesheet>";
NSData *theData = [theDocument objectByApplyingXSLTString:theXSLTString arguments:nil error:&theError];
NSString *theString = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
}
}
이 대부분의 페이지에 잘 작동합니다. 그러나 페이지가 XHTML로 올바르게 확인되지 않으면 가끔 initWithXMLString:
메소드에서 오류가 발생합니다.
그건 충분히 공평합니다. 나는 XHTML을 정리할 것을 요구하고 있습니다. 그래서 나는 그것이 어떤 문제가 발생했는지보고 할 것을 기대합니다. 그러나 유효성 검사에 문제가있는 경우 실제로 XHTML을 정리하지 않고 nil과 오류를 반환합니다. 문제를 일으키는
한 특정 페이지는 the Ruby class documentation.
나는 우수한 타사 HTML tidy 응용 프로그램이 좋은이 XHTML을 정리할 수 있습니다,하지만 난 NSXMLDocumentTidyHTML 단지 주변에 약간의 따옴표를 추가 할 수 있도록 기대하는 것으로 나타났습니다이다 셀 패딩 값. 이것은 상당히 기본적인 정리 작업입니다. 그리고 나는 내 코드베이스에 또 다른 종속성을 추가하려고하지 않는다.
코코아가 XHTML을 정리하는 방식에 제가 누락 된 것이 있습니까? 아니면 그냥 총알을 물고 코드 대신 HTML Tidy를 사용해야합니까?
-objectByApplyingXSLTString : arguments : error :가 NSData가 아닌 NSXMLDocument를 반환 할 수 있기 때문에이 코드가 항상 작동하지 않는 것으로 나타났습니다. –