0

アプリにブックマークのインポート機能を追加しようとしています。私はそれをいくつか持っていますが、すべての URL とタイトルを抽出するだけです。

- (NSArray *)urlsInHTML:(NSString *)html {
    NSError *error;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=href=\").*?(?=\")" options:NSRegularExpressionCaseInsensitive error:&error];

    NSArray *arrayOfAllMatches = [regex matchesInString:html options:0 range:NSMakeRange(0, [html length])];

    NSMutableArray *arrayOfURLs = [[NSMutableArray alloc] init];

    for (NSTextCheckingResult *match in arrayOfAllMatches) {
        NSString* substringForMatch = [html substringWithRange:match.range];
        NSLog(@"Extracted URL: %@",substringForMatch);

        [arrayOfURLs addObject:substringForMatch];
    }

    // return non-mutable version of the array
    return [NSArray arrayWithArray:arrayOfURLs];
}

- (NSArray *)titlesOfTagsInHTML:(NSString *)html {
    NSError *error;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=\"\\>)(.*?)(?=\\<\\/)" options:NSRegularExpressionCaseInsensitive error:&error];

    NSArray *arrayOfAllMatches = [regex matchesInString:html options:0 range:NSMakeRange(0, [html length])];

    NSMutableArray *arrayOfURLs = [[NSMutableArray alloc] init];

    for (NSTextCheckingResult *match in arrayOfAllMatches) {
        NSString* substringForMatch = [html substringWithRange:match.range];
        NSLog(@"Extracted Title: %@",substringForMatch);

        [arrayOfURLs addObject:substringForMatch];
    }

    // return non-mutable version of the array
    return [NSArray arrayWithArray:arrayOfURLs];
}

- (IBAction)import {

    ProgressAlertView *progressAlert = [[ProgressAlertView alloc] initWithTitle:@"Crux" message:@"Importing Bookmarks..." delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
    [progressAlert show];

    NSString *htmlString = [NSString stringWithContentsOfFile:importingBookmarkFilePath encoding:NSUTF8StringEncoding error:nil];
    NSArray *urls = [self urlsInHTML:htmlString];
    NSArray *titles = [self titlesOfTagsInHTML:htmlString];
    //float progress = [[NSNumber numberWithInt:i] floatValue]/[[NSNumber numberWithInteger:[urls count]-1] floatValue];
    for (int i=0; i<[urls count]; i++) {
        Bookmark *importedBookmark = [[Bookmark alloc] init];
        importedBookmark.url = urls[i];
        importedBookmark.title = titles[i];
        [[[BookmarkManager sharedInstance] bookmarks] addObject:importedBookmark];
        [[BookmarkManager sharedInstance] saveBookmarks];
    }
}

しかし、フォルダーを決定する方法が見つからないので、テーマを他のブラウザーとまったく同じように保つことができます。Safari がそれらをエクスポートする方法を確認するには、[ファイル] > [ブックマークのエクスポート] に移動するだけで、html ファイルが表示されます。フォルダーのタイトルを含む定義リストにすべてを入れます。NSREgularExpression または他の方法を使用して、各フォルダーのタイトルとそのフォルダー内のすべてを取得するにはどうすればよいですか?

NSXMLParser を使用して html を解析しようとしましたが、最初の定義リスト タグで停止し、失敗します。

4

1 に答える 1

1

形式はそれほど複雑ではないので、 を使用して解析できるはずですNSScanner。大まかな流れは次のようになります。

  • までスキャン<DT>
  • 以下がH3またはA(フォルダまたはブックマーク)であるかどうかを確認します
  • それに応じて処理する
  • 繰り返す

フォルダーにはサブフォルダーを含めることができるため、オブジェクトを再帰的に作成する必要があります。幸運を。

于 2013-02-22T09:16:07.667 に答える