【问题标题】:iOS Hpple HTML parseiOS Hpple HTML 解析
【发布时间】:2015-09-27 03:20:08
【问题描述】:

我需要在我的应用程序中将网站的内容解析为表格视图。我尝试了 hpple 并且在某些测试用例中它可以工作。但在我的具体情况下,我无法让它工作...... HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
   <head>
      <link rel="stylesheet" type="text/css" href="willi.css">
      </link><script src="style.js" type="text/javascript"></script>
      <title>Homepage</title>
   </head>
   <body>
      <a name="oben"/>
         <h1>Date</h1>
         <br />
      <a href="#07.07.2015">07.07.2015</a><br />
      <a href="#07.08.2015">07.08.2015</a><br />
      <a name="07.07.2015">
         <hr />
      </a>
      <p class="page" style="text-align:left">
      <h2>Date Tue, 7.7.2015</h2>
      created: 7.7. 16:35 </p>
      <p class="page" style="text-align:left">
      <table class="F" border-width="3">
         <colgroup>
            <col width="899"/>
         </colgroup>
         <tr class="F">
            <th rowspan="1" class="F">
               ***&nbsp;&nbsp; Version 1&nbsp;&nbsp; ***
            </th>
         </tr>
         <tr class="F">
            <th rowspan="1" class="F"></th>
         </tr>
         <tr class="F">
            <th rowspan="1" class="F">
               Testmessage 1
            </th>
         </tr>
         <tr class="F">
            <th rowspan="1" class="F">
               Testmessage 2
            </th>
         </tr>
         <tr class="F">
            <th rowspan="1" class="F">
               Testmessage 3
            </th>
         </tr>
         <tr class="F">
            <th rowspan="1" class="F"></th>
         </tr>
         <tr class="F">
            <th rowspan="1" class="F">
               Testmessage 4
            </th>
         </tr>
      </table>
      </p>
      <p class="seite" style="text-align:left">
      <h4>List:</h4>
      <table class="k" border-width="3">
         <tr>
            <th width="50">
               Team
            </th>
            <th width="50">
               &nbsp;Name
            </th>
            <th width="50">
               Nr.
            </th>
            <th width="50">
               &nbsp;Mate
            </th>
            <th width="50">
               Spot
            </th>
            <th width="50">
               &nbsp;Map
            </th>
            <th width="150"></th>
         </tr>
         <tr class="k">
            <th rowspan="5" class="k">
               A
            </th>
            <td>
               &nbsp;First
            </td>
            <td>
               3
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
         <tr>
            <td>
               &nbsp;Second
            </td>
            <td>
               4
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
         <tr>
            <td>
               &nbsp;Sie
            </td>
            <td>
               8
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
         <tr>
            <td>
               &nbsp;Sie
            </td>
            <td>
               9
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
         <tr>
            <td>
               &nbsp;Es
            </td>
            <td>
               10
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
         <tr class="k">
            <th rowspan="1" class="k">
               B
            </th>
            <td>
               &nbsp;Red
            </td>
            <td>
               11
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
      </table>
      </p>
      <hr />
      <a name="07.08.2015">
         <hr />
      </a>
      <p class="page" style="text-align:left">
      <h2>Date Thu, 8.7.2015</h2>
      created: 7.7. 16:35 </p>
      <p class="page" style="text-align:left">
      <table class="F" border-width="3">
         <colgroup>
            <col width="899"/>
         </colgroup>
         <tr class="F">
            <th rowspan="1" class="F">
               ***&nbsp;&nbsp; Version 1&nbsp;&nbsp; ***
            </th>
         </tr>
      </table>
      </p>
      <p class="page" style="text-align:left">
      <h4>List:</h4>
      <table class="k" border-width="3">
         <tr>
            <th width="50">
               Team
            </th>
            <th width="50">
               &nbsp;Name
            </th>
            <th width="50">
               Nr.
            </th>
            <th width="50">
               &nbsp;Mate
            </th>
            <th width="50">
               Spot
            </th>
            <th width="50">
               &nbsp;Map
            </th>
            <th width="150"></th>
         </tr>
         <tr class="k">
            <th rowspan="5" class="k">
               C
            </th>
            <td>
               &nbsp;Dnk
            </td>
            <td>
               1
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
         <tr>
            <td>
               &nbsp;Es
            </td>
            <td>
               1
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
         <tr>
            <td>
               &nbsp;Dnk
            </td>
            <td>
               2
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
         <tr>
            <td>
               &nbsp;Esta
            </td>
            <td>
               2
            </td>
            <td>
               &nbsp;
            </td>
            <td></td>
            <td>
               &nbsp;
            </td>
            <td>
               &nbsp;Test
            </td>
         </tr>
         <tr>
            <td>
               &nbsp;SWB
            </td>
            <td>
               6
            </td>
            <td>
               &nbsp;Naau
            </td>
            <td>
               F
            </td>
            <td>
               &nbsp;Test
            </td>
            <td>
               &nbsp;
            </td>
         </tr>
      </table>
      </p>
      <hr />
   </body>
</html>

该页面包含两个主要元素 (&lt;table&gt;&lt;/table&gt;),我想用它们来填充我的 UITableView。

我的目标是每个表格有一个部分,并且在每个部分中表格的所有内容。 节标题名称应该是“日期”。

TFHpple *Parser = [TFHpple hppleWithHTMLData:HtmlData];

NSString *XpathQueryString = @"/html/body/a";
NSArray *Nodes = [Parser searchWithXPathQuery:XpathQueryString];

for (TFHppleElement *element in Nodes) {
    NSString *temp = [[element firstChild] content];
    if (temp.length == 10) {
        [Day addObject:temp];
    }
}

在我的NSMutableArray *Day 中,我保存了日期,这很好用。我得到 2 个名称正确的部分。 但是当我尝试接收表格内容时,我无法让它工作...... 我想要类似的东西

tableElement* newElement = [[tableElement alloc] init];
newElement.day = @"07.07.2015";
newElement.team = @"A";
newElement.name = @"First";
newElement.nr = @"3";
newElement.mate = @"";
newElement.spot = @"";
newElement.map = @"";
newElement.status = @"Test";

然后我可以将日期一的所有newElement (s) 存储在一个数组中,并将日期二的所有元素存储在另一个元素中。

编辑:例如newElement.day = @"07.07.2015"; 当然需要 类似newElement.day = [[hppleparse firstChild] content];

【问题讨论】:

    标签: html ios objective-c uitableview hpple


    【解决方案1】:

    这可以通过HTMLKit轻松实现。

    以下是一些使用您提供的 HTML 可以使用它的示例:

    HTMLDocument *document = [HTMLDocument documentWithString:html];
    NSMutableArray *days = [ NSMutableArray array];
    NSArray *links = [document querySelectorAll:@"a"];
    for (HTMLElement *link in links) {
      if (link.textContent.length == 10) {
        [days addObject:link.textContent];
      }
    }
    
    // For example you can:
    // Get all <tr> elements that are children of the table with className 'k'
    NSArray *tableKRows = [document querySelectorAll:@"table.k > tr"];
    
    // Get all <td> elements that are descendants of the table with className 'k'
    NSArray *tableKData = [document querySelectorAll:@"table.k td"];
    
    // Collect content of all <td> elements in `array`
    NSMutableArray *array = [NSMutableArray array];
    for (HTMLElement *td in tableKData) {
      NSString *content = [td.textContent stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
      [array addObject:content];
    }
    

    如果您需要任何进一步的帮助,请告诉我。

    HTMLKit 是一个纯 Objective-C HTML 解析器,支持 CSS3 选择器。它不是 libxml 或任何其他库的包装器,而是一个完整的符合 WHATWG HTML 规范的实现。

    【讨论】:

    • 如果我的类名包含带有空格的文本,例如“table table-responsive table-striped table-condensed table-bordered data-table”,该怎么办。我怎样才能达到上述目标?
    • @HimanDhawan 您可以使用任何 CSS 3 级选择器,尤其是属性选择器,例如table[class~='data-table'] 或 table[class*='responsive']。看看这里的表格w3.org/TR/css3-selectors/#selectors
    • @HimanDhawan 如果您还需要任何进一步的帮助,请告诉我
    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 2013-02-17
    • 2013-04-15
    • 1970-01-01
    • 2012-11-25
    • 2011-02-21
    • 2012-08-10
    • 2015-02-12
    相关资源
    最近更新 更多