如何从相同属性的html中仅获取两个元素?

时间:2019-01-22 08:01:58

标签: xpath html-agility-pack

我想在html上使用htmlagilitypack解析网站

下面是我的代码

var html = @"http://test.com";
HtmlWeb web = new HtmlWeb();
var htmlDoc = web.Load(html);

var htmlNodes = htmlDoc.DocumentNode.SelectNodes("//table[@class='tableclass']//tr")
    .Where(x => !x.Attributes["id"].Value.Contains("tableid"));

执行此代码时,将返回HTMLtable中的所有“ tr”。

以下是返回的HTML之一

<tr bgcolor="gray">
    <td align="center" height="40">123</td>

    <td align="center" width="56">
        <div>
            <img src="http://img.test.com/img.jpg" height="10" border="0" />
        </div>
    </td>

    <td style="padding-left:3px;"><a href="/detail/detail.php?key=1234">THIS_1</a></td>

    <td style="padding-left:3px;"><a href="/detail/detail.php?key=1234">THIS_2</a></td>

    <td style="padding-left:3px;"><a href="/detail/add.php?site=1234"><font color='red'>blah</font></a></td>

    <td align="center"><a href="/board/board.php?id=1">0</a></td>

    <td align="center"><a href="/detail/detail.php?key=1234">0</a></td>

    <td align="center"><a href="/board/board.php?id=1">0</a></td>

    <td align="center"><a href="/board/board.php?id=1">0</a></td>
</tr>

我只想要两个td(THIS_1,THIS_2)InnerText

下面是我的错误代码

foreach (var node in htmlNodes)
{
    var str1 = node.ChildNodes["td"].InnerHtml;
    var str2 = node.SelectNodes(".//td[@style='padding-left:3px;']");
}

我想将[THIS_1放入str1]和[THIS_2放入str2]。

1 个答案:

答案 0 :(得分:0)

尝试按索引获取元素。例如:

foreach (var node in htmlNodes)
{
    var str1 = node.SelectSingleNode("td[3]").InnerText;  // THIS_1
    var str2 = node.SelectSingleNode("td[4]").InnerText;  // THIS_2
}