我正在尝试解析以下网站,以便在iOS上显示如下数据:
9月6日星期六
堤
邦德的Glen Raceway
11:00
RO
两天会议
两个单独的日子
该网站的一个例子:
<div id="main-column">
<h1>September</h1>
<table align="center"><col width="200"><col width="150"><col width="100"><col width="120"><col width="330"><col width="300">
<h2>Saturday 06 September</h2>
<tr id="table1">
<td><b>Club</b></td>
<td><b>Venue</b></td>
<td><b>Start Time</b></td>
<td><b>Meeting Type</b></td>
<td><b>Number of Days for Meeting</b></td>
<td><b>Notes</b></td>
</tr>
<tr id="table2">
<td>Causeway</td>
<td>Bond's Glen Raceway</td>
<td>11:00am</td>
<td>RO</td>
<td>Two Day Meeting,<br> Two Separate Days</td>
<td></td>
</tr>
<tr id="table3">
<td>West Waterford</td>
<td>Ballysaggart</td>
<td>11:00am</td>
<td>RO</td>
<td>Two Day Meeting,<br> One Meeting Over Two Days</td>
<td></td>
</tr>
到目前为止,我已设法使用以下代码获取所有日期:
-(void)loadData {
NSURL *url = [NSURL URLWithString:@"http://www.national-autograss.co.uk/september.htm"];
NSData *htmlData = [NSData dataWithContentsOfURL:url];
TFHpple *htmlParser = [TFHpple hppleWithHTMLData:htmlData];
NSString *xpathQueryString = @"//h2";
NSArray *eventNodes = [htmlParser searchWithXPathQuery:xpathQueryString];
NSMutableArray *eventDates = [[NSMutableArray alloc] initWithCapacity:0];
for (TFHppleElement *element in eventNodes) {
NSString *date = [[element firstChild] content];
[eventDates addObject:date];
}
_objects = eventDates;
[self.tableView reloadData];
}
表格中的数据需要的Xpath查询是// table / tr / td吗?我尝试了这个,我立刻得到了一个错误,即向数组中添加一个nil对象。
或者我最好将所有表作为单独的元素,然后单独解析内部数据?
非常感谢任何帮助,指南或想法。
答案 0 :(得分:1)
我最近给了this answer一个旧的问题。
将URL更改为autograss网站,将查询字符串更改为...
NSString *queryString = @"//table";
...为了获得所需文本节点的最近祖先,给出了这个日志输出:
2014-10-28 11:52:02.416 SiteSearcher [28314:613] theText:
Saturday 06 September Club Venue Start Time Meeting Type Number of Days for Meeting Notes Causeway Bond's Glen Raceway 11:00am RO Two Day Meeting, Two Separate Days West Waterford Ballysaggart 11:00am RO Two Day Meeting, One Meeting Over Two Days Sunday 07 September...
但也给出了
...2014 Fixtures:
January
February
March
April
May
June
2014 Fixtures Cont'd:
July
August
September
October
November
December
Official Details:
Regisitered Address:
46 Brookside, Alconbury,
Huntingdonshire, PE28 2EP.
...因为它检索所有表。
(请原谅着色 - 日志输出选项卡似乎搞乱了blockQuotes!)。
我不知道具有所有混乱的文本是否有用,但也许这是一个开始。但是,如果您希望将文本的片段分配给某些TableView的数组元素,那么递归将需要进行调整。
<强>更新强>
在查看this question的答案后,我意识到可以使用条件查询进行一些整理:
NSString *xPathQueryString = @"//tr[not(@id='table1')]|//h2";
或
NSString *xPathQueryString = @"//h2/text()|//tr[not(@id='table1')]//td/text()";
第一个查询拉取元素节点,而第二个查询拉取文本节点本身。因此,第二个方法不需要递归方法来在标记内进行深入研究,但(据我所见)不会带来更多信息,例如父标记。