1

Web ページから本文の段落を抽出し、それらを文字列に格納したいと考えています。

まず、以下を使用してソース コード全体を取得します。

NSString *sourceCode = [NSString stringWithContentsOfURL:[NSURL URLWithString:currentLink] encoding:NSUTF8StringEncoding error:&error];

本文の段落が後<!-- (START) Pagination Content Wrapper -->に始まり、前に終わる<!-- (END) Pagination Content Wrapper -->

だから私はそのように文字列を分割する予定です

NSString *startingPt = @"<!-- (START) Pagination Content Wrapper -->";
NSString *endingPt = @"<!-- (END) Pagination Content Wrapper -->";

NSString *sub = [sourceCode substringFromIndex:NSMaxRange([str rangeOfString:startingPt])];
sub = [sourceCode substringToIndex:[s rangeOfString:endingPt].location;

次にstringByReplacingOccurrencesOfString:withString:、残りのhtmlタグを次のように置き換えます@""

私の目標を達成するためのより良い方法はありますか?

4

2 に答える 2

0

START と END を削除する部分文字列を取得したら、単にNSString+HTML カテゴリを使用して html タグをエスケープできます。これは、html エンコーディング、デコーディングなどを実装するのに非常に適したカテゴリです。主なものは、NSString インスタンスに使用できることです。そのために別のオブジェクトを作成する必要はありません。

Objective C の HTML エスケープ/エスケープここでは、それに関するより多くの議論を見つけることができます。

これらは、その投稿で提案されているように利用可能な方法であり、私はそれが好きです.

- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;
于 2012-10-17T07:13:43.827 に答える
0

それらを削除する前に、HTML タグを見つける必要があります。このシステムが使用する必要があるタグの数が限られているという事実を知っている場合を除き、それらのリストをコードにハードコーディングしないでください。また、-stringByReplaceingOccurrences... を使用すると、すべての引数 ID やクラス タグなどを含む正確な文字列が必要になるため、変更される可能性がさらに高くなります。

vishy によって提案されたサードパーティの拡張機能を使用する場合を除き、それは必要なことを実行するように見えますが、次のようにする必要があります。

1) 文字列内で最初に出現する「<」を見つける

2) 「<」がエスケープされているかどうかを確認します。

3) そうでない場合は、次の ">" を探します。

4) それがエスケープされているかどうかを確認します。

5) そうでない場合は、タグの NSRange (「<」から「>」まで) を作成し、-stringByReplaceingCharactersInRange を使用してそれを削除します。

6) エスケープされていない "<" がなくなるまで繰り返します。

これにより、非 HTML 化されたテキストが残りますが、プレーン テキストではありません。HTML エスケープは引き続き表示されますが、同様に重要なことに、HTML が削除された後に空白 (HTML では無視される) が意味をなすという保証はありません。

于 2012-10-17T20:56:24.913 に答える