2


2

NSXMLDocumentTidyHTMLはいくつかのXHTML検証エラーを片付けません

Webページのリストからテキストを取得したいです。 私は少し実験をしましたが、私のニーズに対する最善の方法はWebKitを経由することです。

ページのソースを取得したら、http://sugarmaplesoftware.com/25/strip-html-tags/#comment-71 [このコメントのテクニック]を使用して、すべての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 = @"\n\n\n\n\n";
        NSData *theData = [theDocument objectByApplyingXSLTString:theXSLTString arguments:nil error:&theError];
        NSString *theString = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
    }
}

これはほとんどのページでうまくいきます。 ただし、ページがXHTMLとして正しく検証されない場合、 `+ initWithXMLString:+`メソッドからエラーが発生することがあります。

それは十分に公平です - 私はそれにXHTMLを片付けるように頼んでいます、それで私はそれが遭遇したどんな問題を報告することを期待するでしょう。 しかし検証に問題がある場合は、実際にXHTMLを片付けるのではなく、nilとエラーを返します。

この問題の原因となっているページの1つがhttp://api.rubyonrails.org/classes/Builder/CSS.html [Rubyクラスのドキュメント]です。

私は優れたサードパーティのhttp://tidy.sourceforge.net/ [HTML tidy]アプリケーションがこのXHTMLをきれいに片付けることができることを発見しました、しかし私はNSXMLDocumentTidyHTMLがセルパッド値のまわりにいくつかの引用符を追加できることを期待します。 これはかなり基本的なクリーンアップ操作です。 そして私は私のコードベースに別の依存関係を追加することに熱心ではありません。

CocoaがXHTMLをクリーンアップする方法に欠けていることはありますか? それとも私のコードで代わりに箇条書きを噛み、代わりにHTML Tidyを使用する必要がありますか?

1 Answer


3


XHTMLドキュメントはXMLとして扱われるため、 `+ NSXMLDocumentTidyXML +`フラグを使用すると幸運になるかもしれません。