html - 尝试从 html 中提取表数据

标签 html iphone ios objective-c ipad

基本上,我需要从这个 html 文件中解析 td(表数据)。我需要获得正确的 xpath。我使用 raywenderlich 作为此任务的模型,这是我到目前为止的代码。

  NSURL *tutorialsUrl = [NSURL URLWithString:@"http://example.com/events];
NSData *tutorialsHtmlData = [NSData dataWithContentsOfURL:tutorialsUrl];

// 2
TFHpple *tutorialsParser = [TFHpple hppleWithHTMLData:tutorialsHtmlData];

// 3

NSString *tutorialsXpathQueryString = @"This is where I need to enter my xpath to rerieve the table data";
NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];

多亏了 firebug,我有了这个元素的 html 路径,我将在下面发布。

  /<html lang="en">/<body>/div id="page" class="container">/<div class="span-19">/<div id="content">/<div>/<table id=yw0 class="detail-view">/<tbody>/<tr class="even">/<td>moo</td>/

我需要解析文本 moo。任何帮助将不胜感激。

这也是我从 firebug 获得的 x 路径,但它根本不起作用。

    /html/body/div/div[4]/div/div/table/tbody/tr[2]/td

最佳答案

首先需要获取子字符串,每个子字符串包含一个需要提取的元素:

    NSArray *split = [text componentsSeparatedByString:@"<td>"];

在数组“split”中,第一个对象不包含您想要的任何内容,因此您将不再使用它。现在,对于该数组中的每个子字符串(第一个除外),您需要搜索带有“/td”标记的子字符串:

    NSRange range = [string rangeOfString:@"</td>"];

然后删除它及其后面的所有内容:

    - (NSString *)substringToIndex:(NSUInteger)anIndex //you will get index by searching for "</td>" as mentioned

编辑:

另一种可能性是使用 ComponentsSeparatedByString 代替提到的标记的第二步和第三步,并且在每个数组的第一项中,您将拥有想要的文本。

编辑2:(整个代码)

    NSString* originalText = @"  /<html lang=""en"">/<body>/div id=""page"" class=""container"">/<div class=""span-19"">/<div id=""content"">/<div>/<table id=yw0 class=""detail-view"">/<tbody>/<tr class=""even"">/<td>moo1</td><td>moo2</td>/";
    NSArray* separatedParts = [originalText componentsSeparatedByString:@"<td>"];
    NSMutableArray* arrayOfResults = [[NSMutableArray alloc] init];
    for (int i = 1; i < separatedParts.count; i++) {
           NSRange range = [[separatedParts objectAtIndex:i] rangeOfString:@"</td>"];
           NSString *partialResult = [[separatedParts objectAtIndex:i] substringToIndex:range.location];        
           [arrayOfResults addObject:partialResult];
    }

我稍微修改了原始文本,以表明它确实适用于内部有更多项目的表格

关于html - 尝试从 html 中提取表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16849797/

相关文章:

javascript - Mapbox GL - 突出显示功能和 queryRenderedFeatures(),同时允许 basemap 样式更改

iphone - 如何使用 NSUserDefaults 而不是我自己的服务器添加消耗品 In App Purchases?

ios - Localizable.strings 工作但不适用于意大利语 else Storyboard完美本地化

javascript - iPad 2 上的 Safari 动态加载图像导致内存泄漏

ios - 核心数据迁移: How should i change the data type from bool to int in next version

c# - 在 asp.net 中更改 smtp 主机时出错

html - Bootstrap - 打印页面而不破坏卡片

iphone - 在网格上旋转 CGPoint 的最佳方法是什么?

javascript - 如何使用javascript获取表中所有复选框的值?

iphone - 如何在 iOS 的 facebook sdk 上发布大视频?