さて、私はウェブページを取得してテキストのパッセージに変換できるウェブクローラーに取り組んでいます。タグ自体を削除するには、スタック オーバーフローでこれを見つけました。
- (NSString *) stripTags:(NSString *)str
{
NSMutableString *ms = [NSMutableString stringWithCapacity:[str length]];
NSScanner *scanner = [NSScanner scannerWithString:str];
[scanner setCharactersToBeSkipped:nil];
NSString *s = nil;
while (![scanner isAtEnd])
{
[scanner scanUpToString:@"<" intoString:&s];
if (s != nil)
[ms appendString:s];
[scanner scanUpToString:@">" intoString:NULL];
if (![scanner isAtEnd])
[scanner setScanLocation:[scanner scanLocation]+1];
s = nil;
}
return ms;
}
そしてそれは機能しますが、スクリプトタグとスタイルタグの間のコンテンツではなく、タグのみを削除します(空の文字列になるため、すべてのタグ間のコンテンツを削除したくないのは明らかです)。
特にスクリプトとスタイルのタグを切り詰める方法はありますか?
よろしくお願いします。
編集:
コードを次のように変更しようとしました:
- (NSString *) stripTags:(NSString *)str
{
NSMutableString *ms = [NSMutableString stringWithCapacity:[str length]];
NSScanner *scanner = [NSScanner scannerWithString:str];
[scanner setCharactersToBeSkipped:nil];
NSString *s = nil;
while (![scanner isAtEnd])
{
[scanner scanUpToString:@"<script" intoString:&s];
if (s != nil)
[ms appendString:s];
[scanner scanUpToString:@"script>" intoString:NULL];
if (![scanner isAtEnd])
[scanner setScanLocation:[scanner scanLocation]+1];
[scanner scanUpToString:@"<" intoString:&s];
if (s != nil)
[ms appendString:s];
[scanner scanUpToString:@">" intoString:NULL];
if (![scanner isAtEnd])
[scanner setScanLocation:[scanner scanLocation]+1];
s = nil;
}
return ms;
}
ただし、スクリプトと css はまだ含まれています