HtmlAgilityPack SelectNodes语法

时间:2014-12-16 14:18:29

标签: c# html .net xpath html-agility-pack

我有以下HTML:

<tbody>
    <tr>
        <td class="metadata_name">Headquarters</td>
        <td class="metadata_content">Princeton New Jersey, United States</td>
    </tr>
    <tr>
        <td class="metadata_name">Industry</td>
        <td class="metadata_content"><ul><li><a href="/q-Engineering-Software-jobs.html" rel="nofollow">Engineering Software</a></li><li><a href="/q-Software-Development-&amp;-Design-jobs.html" rel="nofollow">Software Development &amp; Design</a></li><li><a href="/q-Software-jobs.html" rel="nofollow">Software</a></li><li><a href="/q-Custom-Software-&amp;-Technical-Consulting-jobs.html" rel="nofollow">Custom Software &amp; Technical Consulting</a></li></ul></td>
    </tr>
    <tr>
        <td class="metadata_name">Revenue</td>
        <td class="metadata_content">$17.5 Million</td>
    </tr>
    <tr>
        <td class="metadata_name">Employees</td>
        <td class="metadata_content">201 to 500</td>
    </tr>
    <tr>
        <td class="metadata_name">Links</td>
        <td class="metadata_content"><ul><li><a href="/url?q=http%3A%2F%2Fwww.site.com&amp;h=085df2ca" target="_blank">Company website</a></li></ul></td>
    </tr>
</tbody>

我希望能够将metadata_content值(例如&#34; 1750万美元&#34;)加载到var中,其中metadata_name = =一个值(例如:&#34; Revenue&#34;)。

我尝试使用这样的代码组合几个小时......

orgHtml.DocumentNode.SelectNodes("//td[@class='metadata_name']")[0].InnerHtml;

但我没有得到正确的组合。如果您有一个有用的SelectNodes语法 - 这将为我提供解决方案,我将非常感激。

1 个答案:

答案 0 :(得分:4)

看来你正在寻找的是:

var found = orgHtml.DocumentNode.SelectSingleNode(
    "//tr[td[@class = 'metadata_name'] = 'Revenue']/td[@class = 'metadata_content']");
if (found != null)
{
    string html = found.InnerHtml;
    // use html
}

请注意,要获取元素的文本,您应该使用found.InnerText,而不是found.InnerHtml,除非您特别需要其HTML内容。