基本上我需要从这个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
答案 0 :(得分:1)
首先,您需要获取子字符串,其中每个子字符串包含一个需要提取的元素:
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步和第3步所提到的标签,并且在每个数组的第一项中,您将需要文本。
EDIT2 :(整个代码)
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];
}
我略微修改了原始文字,以表明它真正适用于包含更多项目的表格