首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要hpple帮助的iOS解析内容

需要hpple帮助的iOS解析内容
EN

Stack Overflow用户
提问于 2013-12-04 17:39:07
回答 1查看 834关注 0票数 0

我现在正在教自己如何在iOS中筛选废品,我已经学会了如何在Android上这样做。

我正在使用hpple库。

我目前正在努力复制我在Android上使用hpple所拥有的内容,因此,我正在寻找一些关于如何正确使用hpple来解析我的HTML内容的指导。

我目前正试图解析HTML网站中的以下内容:

代码语言:javascript
复制
<table class="tableForAppContent">     

<tr>
<td nowrap="nowrap">
<a href='testLink'>CODE</a> MyTestCode</td>
<td nowrap>
<a href='testLink'>Number 123</a></td>
<td></td>
<td>Company Name</td>
<td nowrap>
11:10 AM
</td>
<td class="tableList" nowrap>
</td>
<td>
</td>
<td nowrap>
Status of company
<br />
</td>
<td>
</td>
</tr>

</table>

我需要能够得到所有的文本值,如果你看到的HTML,所以我需要能够得到的值:“代码MyTestCode",”编号123",“公司名称”,"11:10 AM“和”公司的状态“。

下面是我到目前为止掌握的代码:

代码语言:javascript
复制
NSURL *url = [NSURL URLWithString:@"MyTestSite.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setTimeoutInterval: 30.0]; // Will timeout after 30 seconds
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue currentQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

 if (data != nil && error == nil)
 {
     NSString *result = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
     TFHpple *tutorialsParser = [TFHpple hppleWithHTMLData:data encoding:@"NSASCIIStringEncoding"];
     NSString *tutorialsXpathQueryString = @"//table[@class='tableForContent']//td";
     NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];

     NSMutableArray *newTutorials = [[NSMutableArray alloc] initWithCapacity:0];
     for (TFHppleElement *element in tutorialsNodes) {
           NSLog(@"%@", [[element firstChild] content]);

           }
      }
      else
      {
      // There was an error, alert the user
      }                    
}];

我无法为下面的代码行找出正确的XPath查询字符串

代码语言:javascript
复制
NSString *tutorialsXpathQueryString = @"//table[@class='tableForContent']//td";

无论我如何尝试,我一次只能找到其中的一个元素,所以我可以得到“公司名称”的价值,但没有其他任何东西。

有人能帮忙处理查询字符串吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-04 18:07:11

尝试使用XPath表达式

代码语言:javascript
复制
//table[@class='tableForContent']//*[normalize-space(text()) != '']

它应该为所有节点提供一个非全空白文本。

编辑

上面的解决方案将格式化的<td>条目分成几个节点,这不是您想要的。因此,实际上,就粒度级别而言,原始XPath似乎是正确的方法。

下面的XPath

代码语言:javascript
复制
//table[@class='tableForAppContent']//td[* or normalize-space(text()) != '']

为您提供“正确”的<td>条目,也就是说,只有那些包含文本本身或至少一个子节点的条目才会导致所有非空节点。

然而,结果节点集由具有子结构的节点组成,这意味着它们同时包含文本节点和具有文本节点的子节点。因为您使用这些结果节点集作为XPath和调用例程之间的接口(在目标C中?)您可能需要自己从这个子树中提取文本元素并将它们连接起来。也许有一些库例程你可以用来做这个。如果没有,则始终可以通过递归遍历结果节点树来完成此操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20382144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档