我正在尝试向我的应用添加导入书签功能。我有一些但它只会提取所有的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如何导出它们,只需转到文件&gt;导出书签,即可看到html文件。它将所有内容放在带有文件夹标题的定义列表中。使用NSREgularExpression或其他方式,我如何获得每个文件夹标题以及该文件夹中的所有内容?
我尝试使用NSXMLParser来解析html,但是它停在第一个定义列表标记处并失败。
答案 0 :(得分:1)
格式并不复杂,因此您应该能够使用NSScanner
对其进行解析。一般流程将如下:
<DT>
文件夹可以包含子文件夹,因此您需要递归创建对象。祝你好运。