在表中查找几行的XPath?

时间:2013-05-10 09:59:10

标签: html ios objective-c xpath hpple

我目前正在尝试使用xpath查询从html网站提取特定数据,但我在拉入特定部分时遇到了问题。

使用//div[@id='main']/h2作为我的xpath查询,我可以使用以下内容提取“查看当前”文本:

exampleSite.title = [[element firstChild] content];

但是我还想提出以下内容:

1. <b>5/9/2013<nbsp><nbsp> 10:58:45 PM</b>
2. <b>6.32</b>
3. <b>5  Total Points</b>
4. <b>3.72</b>

到目前为止,我已经得到了这个://div[@id='main']/table[@class='bodytext']/tr但这就是我被卡住的地方。任何帮助将不胜感激!谢谢!

这是我试图抓的HTML:

<div id="main">
<h2>View Current</h2>

      <table width="96%" border="0" cellpadding="4" cellspacing="0" bordercolor="#eeeeee" align="center" height="276" valign="top" class="bodytext">
        <tr valign="top" >
          <td colspan = 2 height="13" valign="top" align="left" width="54%" class="headerblue" >Balances <br>
          </td>
        </tr>
        <tr valign="top" > 
          <td colspan = 2 height="13" valign="top" align="left" width="54%" class="text" >Balances 
            as of: <b>5/9/2013<nbsp><nbsp> 10:58:45 PM</b></td>
        </tr>
        <tr valign="top" > 
          <td colspan = 2 height="13" valign="top" align="left" width="46%" class="text" >Account 
            Number: <b>101010123</b></td>
        </tr>
        <tr valign="top" > 
          <td colspan = 2 height="13" valign="top" align="left" width="46%" class="text" ></td>
        </tr>

        <tr valign="top" > 
          <td height="13" valign="top" align="left" width="46%" class="text" >Example Card Amount: 
            <b>6.32</b></td>
<td height="13" valign="top" align="left" width="46%" class="text" ><a href="balance.asp?">View Details</a></td>
        </tr>

        <tr valign="top" > 
          <td height="13" valign="top" align="left" width="46%" class="text" >Example Dining Plans:<b>5  Total Points</b>

</td>
<td height="13" valign="top" align="left" width="46%" class="text" ><a href="balance2.asp?">View Details</a></td>
        </tr>

        <tr valign="top" > 
          <td height="13" valign="top" align="left" width="46%" class="text" >Credit For Printing: 
            <b>3.72</b></td>
<td height="13" valign="top" align="left" width="46%" class="text" ><a href="balance1.asp?">View Details</a></td>
        </tr>

          <td colspan = 2 height="13" valign="top" align="CENTER"  class="text">For 
            questions contact Cashiers at<BR> (000)000-0011 or <a href="mailto:example@example.com">example@example.com</a></td>
        </tr>
        <tr valign="top"> 
          <td colspan = 2 height="13" valign="top" align="CENTER"  class="text" > 

<a href="balance1.asp">All Plan Usage for last 90 days is available here</a>
            </td>
        </tr>
        <tr valign="top"> 
          <td colspan = 2 height="13" valign="top" align="CENTER"  class="text" > 

<a href="balance.asp?pln=Full">All Usage for last 365 days is available here</a>
            </td>
        </tr>

      </table>



</div>

2 个答案:

答案 0 :(得分:2)

//div[@id='main']/table[@class='bodytext']/tr/td/b应该会为您提供表格单元格中所有<b>的列表。

答案 1 :(得分:1)

以下是Mennny答案的扩展,实际上是正确的,所以你应该接受它。 我会在评论中尝试回答您的其他问题:

你做这样的解析:( htmlData是我的演示数据)

NSData *htmlData = [NSData dataWithContentsOfFile:[@"/Users/dennis/Desktop/demo.html" stringByStandardizingPath]];
TFHpple *parser = [[TFHpple alloc] initWithHTMLData:htmlData];
NSArray *bTags = [parser searchWithXPathQuery:@"//div[@id='main']/table[@class='bodytext']/tr/td/b"];

之后,您将已解析的<b>标记的内容放在NSMutableArray中。

NSMutableArray *stringsInBTag = [[NSMutableArray alloc] initWithCapacity:0];
for (TFHppleElement *element in bTags) {
    [stringsInBTag addObject:element.content];
}

你得到的是:(数组的记录输出)

  

(       “2013年5月9日”       101010123,       “6.32”,       “5总积分”,       “3.72”   )

现在您要设置标签:

// Set label 1 to third <b>
self.label1.text = stringsInBTag[2];

// Set label 2 to first <b> 
self.label2.text = stringsInBTag[0];