2009-06-23 5 views
2

웹 페이지 목록에서 텍스트를 가져오고 싶습니다. 약간의 실험을했는데 내 요구에 가장 적합한 방법은 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를 사용해야합니까?

+0

-objectByApplyingXSLTString : arguments : error :가 NSData가 아닌 NSXMLDocument를 반환 할 수 있기 때문에이 코드가 항상 작동하지 않는 것으로 나타났습니다. –

답변

3

XHTML 문서는 XML로 처리되므로 NSXMLDocumentTidyXML 플래그가 더 유용 할 수 있습니다.

+3

그들은 상호 배타적이지 않다는 점에 주목할 가치가 있습니다. NSXMLDocumentTidyHTML | NSXMLDocument는 두 동작을 함께 얻도록 도와줍니다. TidyXML은 유효하지 않은 잘못된 XML을 수정합니다. TidyHTML은 문서의 문자열 값을 읽기 쉽게 만듭니다. –

+0

고마워요. 정말 도움이되었습니다. 나는 NSXMLDocumentTidyHTML과 NSXMLDocumentTidyXML을 별도로 시도했지만, 나의 좌절감으로 그들을 함께 시도하는 것을 잊었다. 이것은 트릭을했다! 더 이상 HTML Tidy에 의존하지 않아도됩니다. 기이. –

관련 문제