1

我正在尝试解析div其中包含 3 个表的信息。我可以毫无问题地从第一个获取信息。

代码如下:

HtmlAgilityPack.HtmlWeb doc = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument htmldocObject = doc.Load(URL);
var res = htmldocObject.DocumentNode.SelectSingleNode("//div[@class='BoxContent']");

var firstTable = res.SelectSingleNode("//table");
var charName = firstTable.ChildNodes[i++].InnerText.Substring(5).Trim();

<div class="BoxContent">
    <table>
        <tr bgcolor=#505050>
            <td colspan=2 class=white>
            <b>I'm getting this text</b>
            </td>
        </tr>
        <tr bgcolor=#F1E0C6>
            <td>I get this too</td>
            <td>I'm getting this as well</td>
        </tr>
    </table>
    <table>
        <tr>
            <td>Trying to retrieve this</td>
        </tr>
    </table>
</div>

如何使用 HAP 找到第二个表信息?

我已经阅读了一些关于 nextsibling 函数的内容,但我无法让它工作。

4

3 回答 3

7
var secondTable = res.SelectSingleNode("//table[2]");
于 2012-07-26T18:41:08.623 回答
0

您可以通过这种方式遍历 div 内的表格集合

foreach(HtmlNode table in doc.res.SelectNodes("//table"])
{
  if(table != null)
  {
    var charName = table.InnerText.Substring(5).Trim();
  }
}
于 2012-07-26T18:35:39.093 回答
0

您可以尝试直接<td>通过更改 Xpath 字符串来获取标签。

HtmlNodeCollection tdNodeCollection = htmldocObject
                                     .DocumentNode
                                     .SelectNodes("//div[@class = 'BoxContent']//td");

foreach (HtmlNode tdNode in tdNodeCollection)
{
     Console.WriteLine(tdNode.InnerText);
}
于 2012-07-26T18:57:46.597 回答